帮助命令
mvn help:active-profiles
mvn help:all-profiles
maven属性
- maven有6类属性,都可以直接在pom中使用,和profile没有关系,profile是为了灵活构建而产生的,也就是说通过profile为属性设置不同的值,并设置profile启用开关,当某个profile启用后,该profile中配置的属性或者插件信息都会在当前项目中起作用。
- 下面是讲解profile种类和如何开启。想知道6类属性可以查看maven灵活构建。
profile种类
- 根据需求profile可以在以下位置中声明。在不同位置声明的profile中可以使用属性元素种类不一样。
- pom.xml :当前项目生效
- 用户settings.xml :用户目录 .m2/settings.xml,当前机器下该用户的所有项目有效
- 全局settings.xml :conf/settings.xml当前机器上所有项目
开启资源过滤
资源文件过滤
- 使用插件maven-resources-plugin
- 对src/main/resources目录下文件开启过滤
<build>
<resources>
<resource>
<directory>{project.basedir}/src/main/resources</directory>
<filtering>true</filtering>
</resource>
<!-- 对sql资源文件关闭资源过滤-->
<resource>
<directory>{project.basedir}/src/main/sql</directory>
<filtering>false</filtering>
</resource>
</resources>
...
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-resources-plugin</artifactId>
<version>${maven-resources-plugin.version}</version>
<configuration>
<encoding>${project.encoding}</encoding>
</configuration>
</plugin>
</plugins>
</build>
web资源文件过滤
激活profile6种方式
- 定义在settings中的profile对所有项目有效,在pom中的只对当前项目有效
<profiles>
<profile>
<id>dev</id>
<properties>
<profiles.active>dev</profiles.active>
</properties>
</profile>
<profile>
<id>test</id>
<properties>
<profiles.active>test</profiles.active>
</properties>
</profile>
<!--通过系统属性激活,当系统中存在某个属性或属性等于某个值时激活-->
<profile>
<id>prod</id>
<activation>
<property>
<name>server</name>
<value>x</value>
</property>
</activation>
<properties>
<profiles.active>prod</profiles.active>
</properties>
</profile>
<profile>
<id>jdk1.6</id>
<activation>
<property>
<name>jdk1.6</name>
</property>
</activation>
<properties>
<java.version>1.6</java.version>
</properties>
</profile>
</profiles>
- 命令行
mvn -Pdev,test //激活dev、test profile
-
- 系统属性激活
- 如果系统属性不存在可以通过mvn设置系统属性。(不是环境变量)
mvn -Djdk1.6 -Dserver=x //激活prod、jdk1.6 profile
- javap -v class类 可以查看编译后class文件的使用的jdk版本,本例中对应50
- mvn help:system 查看系统属性和环境变量
-
- settings文件显示激活
- 表示其配置的profile对所有的项目都处于激活状态。
<profiles>
<profile>
.....
<id>artifactory</id>
</profile>
</profiles>
<activeProfiles>
<activeProfile>artifactory</activeProfile>
</activeProfiles>
<profiles>
<profile>
<id>dev</id>
<activation>
<file>
<missing>x.properties</missing>
<exists>y.properties</exists>
</file>
</activation>
<properties>
.....
</properties>
</profile>
<profiles>
<profiles>
<profile>
<id>dev</id>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
<properties>
<profiles.active>dev</profiles.active>
</properties>
</profile>
<profiles>
- 注:Pom中如果有任何 一个profile通过非“默认激活”方式激活了,那么所有默认激活的profile配置都会失效。
案例
- 需求:项目中除了使用中央仓库的依赖还会用到公司私服上的依赖。想法:中央仓库依赖配置到阿里下载,公司的依赖配置到公司私服上下载。
- 设计:在settings.xml中配置阿里镜像代理中央仓库的依赖。配置profile来满足公司自己依赖的下载。
<settings>
<mirrors>
<!-- 代理central远程仓库 -->
<mirror>
<id>alimaven</id>
<name>aliyun maven</name>
<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
<mirrorOf>central</mirrorOf>
</mirror>
</mirrors>
<profiles>
<profile>
<repositories>
<repository>
<id> maven2 repository snapshots</id>
<name> maven2 repository-snapshots</name>
<url>公司私服地址</url>
</repository>
<repository>
<id> maven2 repository releases</id>
<name>maven2 repository-releases</name>
<url>公司私服地址</url>
</repository>
</repositories>
<pluginRepositories>
<pluginRepository>
<id> maven2 plugin repository releases</id>
<name> maven2 repository-releases</name>
<url>公司私服地址</url>
</pluginRepository>
</pluginRepositories>
<id>artifactory</id>
</profile>
</profiles>
<activeProfiles>
<activeProfile>artifactory</activeProfile>
</activeProfiles>
</settings>