How to Create an Executable JAR with Maven
1.最重要的是使用jar类型,<
packaging
>jar</
packaging
>。当然不指定的话,默认Maven使用的就是jar。
2.利用maven-dependency-plugin来手动创建(方法一)
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-dependency-plugin</artifactId> <executions> <execution> <id>copy-dependencies</id> <phase>prepare-package</phase> <goals> <goal>copy-dependencies</goal> </goals> <configuration> <outputDirectory> ${project.build.directory}/libs </outputDirectory> </configuration> </execution> </executions> </plugin>
①. goal被指定为copy-dependencies,意思是将所有的依赖拷贝到指定的outputDirectory中。例子中是在项目构建文件夹(通常是target文件夹)中创建一个libs文件夹。
②. 使用对①中依赖的连接,创建可执行的、类路径感知的jar。
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-jar-plugin</artifactId> <configuration> <archive> <manifest> <addClasspath>true</addClasspath> <classpathPrefix>libs/</classpathPrefix> <mainClass> org.baeldung.executable.ExecutableMavenJar </mainClass> </manifest> </archive> </configuration> </plugin>
manifest配置,追加一个前缀为libs的classpath,提供了main class的信息——main class的完全限定名。
评价
优点:透明的过程使得我们可以在这里指定每一步
缺点:手动做,依赖不在最终的jar中。意味着可执行jar只在libs文件夹对jar可访问并可见时才能运行。
2.2 Apache Maven Assembly Plugin
Apache Maven Assembly Plugin让用户汇总项目的输出到一个可执行包中,包括它的依赖,模块,站点文档,其他文件。
主要的goal是single,用来创建所有的assemblies。
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-assembly-plugin</artifactId> <executions> <execution> <phase>package</phase> <goals> <goal>single</goal> </goals> <configuration> <archive> <manifest> <mainClass> org.baeldung.executable.ExecutableMavenJar </mainClass> </manifest> </archive> <descriptorRefs> <descriptorRef>jar-with-dependencies</descriptorRef> </descriptorRefs> </configuration> </execution> </executions> </plugin>
也需要提供main class的信息。不同的是它会自动拷贝所有需要的依赖到jar文件中。
descriptorRef提供了一个名字,它被用于加到项目名上。
可参考Links:
1. maven-assembly-plugin/usage
2. Pre-defined Descriptor Files