maven打包时指定主类
如果我们的Java项目利用maven构建,并且想打成jar包运行,如果我们直接用mvn clean package
命令进行打包,在target目录下生成的jar包,我们通过java -jar xxx.jar
进行运行,会报如下错误:
.\original-hello-world-1.0-SNAPSHOT.jar中没有主清单属性
原因
这是因为,我们的jar包中没有指定启动的主类是什么。
这个主类清单属性在哪里指定呢?
我们用压缩软件解压刚刚生成的jar包,找到META-INF文件夹,下面有一个MANIFEST.MF文件,用记事本打开这个文件。如果指定了启动的主类,那么这个文件中会有一个属性叫做Main-Class
解决办法
我们可以利用maven插件在打包的时候指定主类,在maven配置中增加一下配置:
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>3.1.1</version>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
<configuration>
<transformers>
<transformer
implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
<mainClass>com.juvenxu.mvnbook.helloworld.HelloWorld</mainClass>
</transformer>
</transformers>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
其中<mainClass>
标签中的内容就是主类的全限定名,然后再执行maven打包命令,会在tartget目录生成两个jar包。其中一个是以origin开头的,这个就是原始jar包,是没有指定主类的。另外一个没有以origin开头的,是已经添加了主类清单的jar包,可以使用java -jar
命令运行。
maven打包时指定主类
https://www.zhaojun.inkhttps://www.zhaojun.ink/archives/maven-package-main-class