你可能会在构建一个spring boot项目和一个JavaFx项目中遇到这样的问题,当我通过maven中的package打包为jar后,直接运行提示你 没有主清单属性
这通常的原因有如下:
JAR 文件中的 MANIFEST.MF 文件缺少 Main-Class
属性:
每个 JAR 文件都有一个 META-INF/MANIFEST.MF
文件,这个文件包含关于 JAR 文件的一些元数据信息。为了使 JAR 文件可以作为可执行文件运行,MANIFEST.MF
文件中必须包含一个 Main-Class
属性,指定要运行的主类。系统在运行时会先根据这个文件中的main-class中的项目结构信息去找你的 启动类@SpringbootApplication或者fx项目的HelloApplication.java。找不到它就会提示你主清单属性找不着。
所以是什么导致的MANIFEST.MF 文件缺少 Main-Class
属性,这个原因就有很多了,就像是抽烟和喝酒都会增加患癌机会一样。缺少主清单属性是一种结论,只是影响他的原因不同:
首先进入idea打开你的target文件点击你的jar包:
如果使用构建工具(如 Maven、Gradle)来生成 JAR 文件,大概率是你构建配置文件(如 pom.xml
或 build.gradle
)中没有正确配置 Main-Class
属性。
如果是sb项目spring项目,可以直接使用构建插件,构建插件可以帮助你自动化完成构建:
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<excludes>
<exclude>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</exclude>
</excludes>
</configuration>
</plugin>
</plugins>
如果不是spring项目,是FX项目或者你不想用sb插件那你需要手动的告诉maven你要添加主类信息
我们删掉自带的构建插件后,添加这段依赖
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>3.4.1</version>
<configuration>
<archive>
<manifest>
<mainClass>com.fox.toolkitforstudents.HelloApplication</mainClass>
</manifest>
</archive>
</configuration>
</plugin>
通过这种方式将手动的创建主类信息,然后clear之后再package,你会发现,生成的jar内:
接下来我们就可以尝试运行这个jar包了