为了账号安全,请及时绑定邮箱和手机立即绑定

无法执行 jar- 文件:“没有主清单属性” 问题处理

无法执行 jar- 文件:“没有主清单属性” 问题处理

场景

今天业余时间写好 java 脚本 进行 etl 业务数据清洗, 打 jar 包上传至服务器使用命令 java -jar etlMemberTag.jar 执行时报错:

can’t execute jar- file: “no main manifest attribute”

无法执行 jar- 文件:“没有主清单属性”

为了解决该问题,我查阅网络资料。并把问题解决方法整理如下

META-INF/MANIFEST.MF

要使 jar 包可执行, 你需要为 jar 创建一个名为 META-INF/MANIFEST.MF 的文件

META-INF/MANIFEST.MF 的作用在于, 它是存在于 jar 包文件中一个清单文件, 关于 JAR包 的相关描述信息、启动时的配置信息和安全性信息等均保存在其中,可以理解为 jar 的一个配置文件
META-INF/MANIFEST.MF 的基础属性:

  • Manifest-Version: 定义 manifest 的文件版本,如:Manifest-Version: 0.1
  • Created-By: 文件的生成者,该属性一般由 jar命令行工具 生成,例如:Created-By: Apache Ant 1.8.2
  • Signature-Version: 签名版本
  • Class-Path: 依赖项列表,若存在多个依赖项时则采用空格分隔。依赖项路径为以JAR包路径为参考系的相对路径。

回到问题

配置 文件

我们需要配置 META-INF/MANIFEST.MF 文件, 但文件本身应该有(至少)这一行:

Main-Class: com.mypackage.MyClass

com.mypackage.MyClass位置就是你需要执行的类 public static void main(String[] args) 入口点的类的位置。

配置完成过后, 可以重新打包于 CLI 使用以下命令将执行:

jar cmvf META-INF/MANIFEST.MF .jar

maven pom.xml

对于Maven,还可以使用以下代码内容解决问题。注意,这里只是主类声明,并不是完整的pom.xml

此插件的最新文档:请参阅<maven.apache.org/plugins/maven-jar-plugin/>

<build>
  <plugins>
    <plugin>
      <!-- Build an executable JAR -->
      <groupId>org.apache.maven.plugins</groupId>
      <artifactId>maven-jar-plugin</artifactId>
      <version>3.1.0</version>
      <configuration>
        <archive>
          <manifest>
            <addClasspath>true</addClasspath>
            <classpathPrefix>lib/</classpathPrefix>
            <mainClass>com.mypackage.MyClass</mainClass>
          </manifest>
        </archive>
      </configuration>
    </plugin>
  </plugins>
</build>

点击查看更多内容
2人点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
全栈工程师
手记
粉丝
154
获赞与收藏
1426

关注作者,订阅最新文章

阅读免费教程

感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消