Maven可以使用mvn package指令对项目进行打包,如果使用java -jar xxx.jar执行运行jar文件,会出现"no main manifest attribute, in xxx.jar"(没有设置Main-Class)、ClassNotFoundException(找不到依赖包)等错误。
要想jar包能直接通过java -jar xxx.jar运行,需要满足:
1、在jar包中的META-INF/MANIFEST.MF中指定Main-Class,这样才能确定程序的入口在哪里;
2、要能加载到依赖包。
使用Maven有以下几种方法可以生成能直接运行的jar包,可以根据需要选择一种合适的方法。
方法一:使用maven-jar-plugin和maven-dependency-plugin插件打包
在pom.xml中配置:
<build>
<plugins> <plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>2.6</version>
<configuration>
<archive>
<manifest>
<addClasspath>true</addClasspath>
<classpathPrefix>lib/</classpathPrefix>
<mainClass>com.xxg.Main</mainClass>
</manifest>
</archive>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<version>2.10</version>
<executions>
<execution>
<id>copy-dependencies</id>
<phase>package</phase>
<goals>
<goal>copy-dependencies</goal>
</goals>
<configuration>
<outputDirectory>${project.build.directory}/lib</outputDirectory>
</configuration>
</execution>
</executions>
</plugin> </plugins>
</build>
maven-jar-plugin用于生成META-INF/MANIFEST.MF文件的部分内容,<mainClass>com.xxg.Main</mainClass>指定MANIFEST.MF中的Main-Class,<addClasspath>true</addClasspath>会在MANIFEST.MF加上Class-Path项并配置依赖包,<classpathPrefix>lib/</classpathPrefix>指定依赖包所在目录。
例如下面是一个通过maven-jar-plugin插件生成的MANIFEST.MF文件片段:
Class-Path: lib/commons-logging-1.2.jar lib/commons-io-2.4.jar
Main-Class: com.xxg.Main
只是生成MANIFEST.MF文件还不够,maven-dependency-plugin插件用于将依赖包拷贝到<outputDirectory>${project.build.directory}/lib</outputDirectory>指定的位置,即lib目录下。
配置完成后,通过mvn package指令打包,会在target目录下生成jar包,并将依赖包拷贝到target/lib目录下,目录结构如下:
aaarticlea/png;base64,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" alt="" />
指定了Main-Class,有了依赖包,那么就可以直接通过java -jar xxx.jar运行jar包。
这种方式生成jar包有个缺点,就是生成的jar包太多不便于管理,下面两种方式只生成一个jar文件,包含项目本身的代码、资源以及所有的依赖包。
方法二:使用maven-assembly-plugin插件打包
在pom.xml中配置:
<build>
<plugins> <plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-assembly-plugin</artifactId>
<version>2.5.5</version>
<configuration>
<archive>
<manifest>
<mainClass>com.xxg.Main</mainClass>
</manifest>
</archive>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
</configuration>
</plugin> </plugins>
</build>
打包方式:
mvn package assembly:single
打包后会在target目录下生成一个xxx-jar-with-dependencies.jar文件,这个文件不但包含了自己项目中的代码和资源,还包含了所有依赖包的内容。所以可以直接通过java -jar来运行。
此外还可以直接通过mvn package来打包,无需assembly:single,不过需要加上一些配置:
<build>
<plugins> <plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-assembly-plugin</artifactId>
<version>2.5.5</version>
<configuration>
<archive>
<manifest>
<mainClass>com.xxg.Main</mainClass>
</manifest>
</archive>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
</configuration>
<executions>
<execution>
<id>make-assembly</id>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
</plugin> </plugins>
</build>
其中<phase>package</phase>、<goal>single</goal>即表示在执行package打包时,执行assembly:single,所以可以直接使用mvn package打包。
不过,如果项目中用到Spring Framework,用这种方式打出来的包运行时会出错,使用下面的方法三可以处理。
方法三:使用maven-shade-plugin插件打包
在pom.xml中配置:
<build>
<plugins> <plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>2.4.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.xxg.Main</mainClass>
</transformer>
</transformers>
</configuration>
</execution>
</executions>
</plugin> </plugins>
</build>
配置完成后,执行mvn package即可打包。在target目录下会生成两个jar包,注意不是original-xxx.jar文件,而是另外一个。和maven-assembly-plugin一样,生成的jar文件包含了所有依赖,所以可以直接运行。
如果项目中用到了Spring Framework,将依赖打到一个jar包中,运行时会出现读取XML schema文件出错。原因是Spring Framework的多个jar包中包含相同的文件spring.handlers和spring.schemas,如果生成一个jar包会互相覆盖。为了避免互相影响,可以使用AppendingTransformer来对文件内容追加合并:
<build>
<plugins> <plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>2.4.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.xxg.Main</mainClass>
</transformer>
<transformer implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
<resource>META-INF/spring.handlers</resource>
</transformer>
<transformer implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
<resource>META-INF/spring.schemas</resource>
</transformer>
</transformers>
</configuration>
</execution>
</executions>
</plugin> </plugins>
</build>