1、问题描述
通过maven构建了jar文件,如图所示
2、命令窗口运行jar,提示“没有主清单属性”
2.1 分析问题
在打包构建的jar目录内,可以看到有一个MANIFEST.MF文件,如图所示:
该文件就是jar运行时要查找的清单目录,其中主清单数据,就是我们要运行的主类(函数入口main所在的类);
提示缺少主清单属性,就是文件中少了主清单属性如下所示:
正常情况下,该清单文件内会有一个:
Main-Class:org.example.xxx.APP
属性,他就是我们程序运行的入口(main函数所在的类路径)
2.2 解决问题
通过压缩工具解压我们的jar包,找到清单目录文件,编辑MANIFEST.MF文件:
Manifest-Version: 1.0
Built-By: xiayutian
Created-By: Apache Maven 3.5.0
Build-Jdk: 1.8.0_191
Main-Class: org.example.Platform # 添加上我们的主类路径
将MANIFEST.MF重新替换掉jar包内的文件,问题解决;
3 、成功运行
win+r 命令窗口
java -jar .\hive-ddl2sql.jar
程序正常运行
4. 打包时指定mainclass
要创建一个可执行的JAR,只需要设置主类作为应用程序的入口点
在maven工程中,pom.xml添加一下插件片段,用来设置主类。
https://maven.apache.org/plugins/maven-shade-plugin/examples/executable-jar.html链接
<project>
...
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>3.2.4</version>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
<configuration>
<transformers>
<transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
<mainClass>org.sonatype.haven.HavenCli</mainClass>
</transformer>
</transformers>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
...
</project>