1、Java版本插件,用来指定jdk版本
<!-- 配置java插件,指定版本 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.2</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
<encoding>UTF-8</encoding>
<compilerArguments>
<extdirs>${basedir}/lib</extdirs><!--指定外部lib-->
</compilerArguments>
</configuration>
</plugin>
2、scala插件,编译scala工程一定要配置
<plugin>
<groupId>net.alchim31.maven</groupId>
<artifactId>scala-maven-plugin</artifactId>
<version>3.2.0</version>
</plugin>
3、jar插件
Maven在打包的时候默认将工程打包成一个单独的jar,但是会把resources下面的配置文件全部都加入到jar包,不能在线上动态修改。如果需要修改,通过maven-jar-plugin插件剔除需要修改的配置文件,然后用maven-assembly-plugin插件打整包的时候放到config文件夹下。程序内部通过classpath:**/xxx/xxx.xml或者System.getProperty("user.dir") + "/config/xxx/xxx.xml"来读取
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<configuration>
<excludes>
<exclude>configparams/</exclude>
<exclude>db/db.properties</exclude>
<!--mapper.xml一般不需要抽取出去,同时注意db.xml中mapper.xml的配置-->
<!--<exclude>**/mybatis/</exclude>-->
<exclude>quartz/job.properties</exclude>
<exclude>logback.xml</exclude>
</excludes>
<!--指定主类,一般都不需要指定,只需要在Java命令启动的时候指定即可-->
<!--除非是在window下双击执行-->
<!--<archive>-->
<!--<manifest>-->
<!--<addDefaultImplementationEntries>true</addDefaultImplementationEntries>-->
<!--<addClasspath>true</addClasspath>-->
<!--<mainClass>com.surfilter.pscms.timer.Timer</mainClass>-->
<!--</manifest>-->
<!--<manifestEntries>-->
<!--<Class-Path>.</Class-Path>-->
<!--</manifestEntries>-->
<!--</archive>-->
</configuration>
</plugin>
4、maven-enforcer-plugin
用于批量解决maven依赖冲突的问题,因为一些比较热门的jar(比如guava)会被很多的依赖使用到,那么就会出现guava版本冲突的问题,此时我们可以一个个依赖的execution,但是太繁琐。可以利用这个插件一步到位。
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-enforcer-plugin</artifactId>
<version>1.2</version>
<executions>
<execution>
<id>enforce-banned-dependencies</id>
<goals>
<goal>enforce</goal>
</goals>
<configuration>
<rules>
<requireMavenVersion>
<version>[3.3.3,)</version>
</requireMavenVersion>
<requireJavaVersion>
<version>[1.8,)</version>
<message><![CDATA[[ERROR] OLD JDK [${jdk.version}] in use. Jetty ${jetty.version} requires JDK 1.8 or newer]]></message>
</requireJavaVersion>
<!--最主要的是下面的maven依赖排除,排除aspectj和guava-->
<bannedDependencies>
<searchTransitive>true</searchTransitive>
<excludes>
<exclude>aspectj:aspectj*</exclude>
<exclude>com.google.guava:guava*</exclude>
</excludes>
</bannedDependencies>
</rules>
<fail>true</fail>
</configuration>
</execution>
</executions>
</plugin>
5、assembly插件
用于将工程打成bin config lib version 通用格式,通过启动脚本将lib下的jar包“拼接”起来,
然后用Java -cp "拼接的jar" 主类路径 1> $STDOUT_FILE 2>&1 & 来执行
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-assembly-plugin</artifactId>
<version>2.6</version>
<configuration>
<!-- 这个是最终打包出来的压缩文件名字,${maven.build.timestamp}是加上一个时间戳 -->
<finalName>${artifactId}-${version}</finalName>
<descriptor>assembly/assembly.xml</descriptor>
<!--最终zip包名是否拼接assemblyID名称,默认是加上的-->
<!--加上后就变成: spring-javaproject-1.0-assembly.zip-->
<appendAssemblyId>false</appendAssemblyId>
</configuration>
<executions>
<execution>
<phase>package</phase> <!-- 绑定到package生命周期阶段上 -->
<goals>
<goal>single</goal> <!-- 只运行一次 -->
</goals>
</execution>
</executions>
</plugin>