Maven项目中一般只会将项目的源代码编译分发,而依赖包等都不会被包括在这个范围内,即项目的最终输出不会包含依赖包、模块等项目运行时所必须的包和文件。如果想在分发的包中包含这些依赖包和模块,需要使用maven assembly plugin。
Maven Assembly Plugin的使用很简单,只需在pom.xml中添加如下配置
<build>
<finalName>rest</finalName>
<plugins>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.6.1</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<version>3.0.0</version>
<configuration>
<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>
<plugin>
<artifactId>maven-jar-plugin</artifactId>
<version>3.0.2</version>
</plugin>
</plugins>
</build>
然后,执行如下命令创建一个项目
RossideMacBook-Pro:rest rossi$ mvn package
当构建成功后,在target目录下会生成两个jar包,一个以with-dependencies结尾的jar就是打包了依赖包的。
构建过程中如果有报NoClassDefFoundError,注意看下是哪个jar的,可能的原因是maven在下载jar的时候有问题,将该jar所在目录下所有的文件删除,再运行mvn package,让maven重新下载即可。