maven-resources-plugin(资源插件),maven-compiler-plugin(编译项目),maven-jar-plugin(将项目打成jar包),maven-assembly-plugin(将所有依赖打成jar包)。使用maven-assembly-plugin容易产生一个错误,就是在多个依赖冲突的时候无法解决。不过使用 maven-shade-plugin 生成一个 uber-jar,可以解决依赖间的冲突,适用于Spring Framework。
配置 maven-shade-plugin
<plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-shade-plugin</artifactId> <version>2.4.1</version> <executions> <execution> <!-- 将goal shade:shade 绑定到 phase package 上,绑定后执行mvn package即可 --> <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>
配置完成后,执行mvn package即可打包。生成的jar文件包含了所有依赖,所以可以直接运行。
<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>
这里的AppendingTransformer的作用是:在Spring Framework中会将多个依赖打到一个jar中,每个jar都会包含spring.handlers和spring.schemas文件,如果生成一个jar包文件会互相覆盖,运行时就会出现XML schema文件出错。为了避免互相影响,使用AppendingTransformer来对文件内容追加合并.
打war时需要maven-resources-plugin(资源插件),maven-compiler-plugin(编译项目),maven-war-plugin插件
maven-war-plugin配置
<plugin> <artifactId>maven-war-plugin</artifactId> <version>3.2.0</version> <configuration> <failOnMissingWebXml>false</failOnMissingWebXml> </configuration> </plugin>
不想打进war包的jar的配置
<build> <filters> <!-- 过滤文件,通常是一个属性文件(名值对的形式) --> <filter>src/main/webapp/META-INF/auto-config.properties</filter> </filters> <finalName>communitytag</finalName> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-war-plugin</artifactId> <version>2.1-alpha-1</version> <configuration> <!-- 不想打进war包的xxx.jar的配置 --> <warSourceExcludes>*/lib/xxx.jar</warSourceExcludes> <webResources> <resource> <!-- 元配置文件的目录,相对于pom.xml文件的路径 --> <directory>src/main/webapp/WEB-INF</directory> <!-- 是否过滤文件,也就是是否启动auto-config的功能 --> <filtering>true</filtering> <!-- 目标路径 --> <targetPath>WEB-INF</targetPath> </resource> </webResources> </configuration> </plugin> </plugins> </build>
单个执行指令先clean->package
Build Artifacts