Maven插件的应用
Maven工程的标准架构
目录 | 备注 |
---|---|
${basedir} | 存放 pom.xml和所有的子目录 |
${basedir}/src/main/resources | 项目的资源,如spring配置文件,properties 资源文件等 |
${basedir}/src/main/webapps | web项目特有 |
${basedir}/src/test/java | 项目的测试类,比如说 JUnit代码、TestNg代码 |
${basedir}/src/test/resources | 测试代码使用的资源 |
-
插件一 maven-resources-plugin
Maven可以区别对待Java代码文件和资源文件,默认的主资源文件目录是src/main/resources,我们可以通过这个插件实现资源文件过滤。资源文件过滤的意思是指我们可以在资源文件里用使用占位符${propertyName},然后开启对资源文件的过滤,pom.xml里再统一设置所有{propertyName}对应的值,就可以在构建过程中将值替换掉资源文件中对应的${propertyName},实现了代码配置分离、做到了参数的统一维护
示例用法
<resources>
<resource>
<directory>src/main/resources</directory>
<includes>
<include>properties/*.properties</include>
</includes>
<filtering>true</filtering>
</resource>
<resource>
<directory>src/main/resources</directory>
<includes>
<include>*.xml</include>
<include>mapper/**/*.xml</include>
<include>mysqlMapper/**/*.xml</include>
<include>*.properties</include>
</includes>
</resource>
</resources>
<properties>
<runtime.env>local</runtime.env>
</properties>
我们的主应用集成后,会根据实际要求部署到不同的环境中,比如联调环境、测试环境、压力环境、预发布环境、生产环境等,而这些环境上的资源配置信息显然是不一样的,针对每套环境,每个具体占位符${propertyName}都会有不同的值,而这种场景可以使用Maven的profile来支持,每个profile都可以独立维护一套参数值,在mvn package的时候灵活指定;此外,maven也支持在package的时候指定多个profile,这个特性在执行自动部署的时候特别有用。使用这个插件,我们的项目可以做到多环境支持,参考命令
mvn package -Pnocheck,env-test
示例用法
<profiles>
<profile>
<id>nocheck</id>
<properties>
<skipTests>true</skipTests>
<checkstyle.skip>true</checkstyle.skip>
<license.skip>true</license.skip>
<notice.skip>true</notice.skip>
<versions.skip>true</versions.skip>
</properties>
</profile>
<profile>
<!-- 本地环境,默认是windows -->
<id>local</id>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
<properties>
<runtime.env>local</runtime.env>
</properties>
</profile>
<profile>
<id>env-test</id>
<properties>
<runtime.env>env-test</runtime.env>
</properties>
</profile>
</profiles>
-
插件二 maven-jar-plugin
当我们将项目模块化后,有一些通用的资源文件基本上大多数模块都会用到,比如log4j.properties,jdbc.properties等,模块中有了这些资源文件,我们才能单独对该模块进行开发、调试。默认情况下maven-jar-plugin会将这些资源文件全部package成一个jar包进行发布,如果这样的jar包集成到一个主应用中部署,运行,很可能导致主应用的配置不生效,我称之为配置混乱,为了解决这个问题,可以开启maven-jar-plugin的排除功能,在执行mvn package之前排除指定的资源文件。
示例用法
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<configuration>
<excludes>
<exclude>applicationContext.xml</exclude>
<exclude>properties/**</exclude>
<exclude>log4j.properties</exclude>
</excludes>
</configuration>
</plugin>
-
插件三 maven-war-plugin
项目如果是web主应用,我们可以使用maven-war-plugin来对webapps下各类文件进行过滤。用法参考maven-resources-plugin
示例用法
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<configuration>
<warName>demo-Rest</warName>
<webResources>
<resource>
<directory>src/main/webapp/WEB-INF</directory>
<filtering>true</filtering>
<targetPath>WEB-INF</targetPath>
<includes>
<include>web.xml</include>
</includes>
</resource>
</webResources>
</configuration>
</plugin>
-
插件四 properties-maven-plugin
-
插件五 maven-assembly-plugin
-
插件六 maven-shade-plugin
-
插件七 versions-maven-plugin