maven的属性可以理解为我们定义了一个变量,后面使用这个变量,如:
定义属性
<properties>
<name>zhangsan</name>
</properties>
使用属性,其中${name}
会被替换成zhangsan
<outputDirectory>src/main/${name}</outputDirectory>
maven属性
在maven中,系统内置了一些公共属性,如${project.basedir}
表示当前项目的路径,如我们新建了一个maven项目,pom文件所在的路径即是项目路径,这里是:C:\TempData\my-workspace\fast-group
工程内置属性
当我们新建一个工程时,这个工程会内置一些属性,这里新建工程结构如下:
C:\TempData\ericsson-workspace
--test-maven
--src
--main/java
--main/resources
--target
--classes
--pom.xml
对应上述工程结构如下,
内置属性 | 描述 | 对应项目映射 |
---|---|---|
${project.basedir} | 项目根目录,pom.xml文件所在的目录 | C:\TempData\ericsson-workspace\test-maven |
${project.build.directory} | 构建工作路径,默认为target | C:\TempData\ericsson-workspace\test-maven\target |
${project.build.outputDirectory} | 构建输出目录,默认为target\classes | C:\TempData\ericsson-workspace\test-maven\target\classes |
${project.build.sourceDirectory} | 源代码所在目录,默认为src\main\java | C:\TempData\ericsson-workspace\test-maven\src\main\java |
项目结构扩展的属性,当我们新建一个maven项目pom文件时候,产生如下内容
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.ericsson</groupId>
<artifactId>test-maven</artifactId>
<version>0.1</version>
<packaging>jar</packaging>
<name>test-maven</name>
<url>http://maven.apache.org</url>
</project>
其中xml根节点为project,那么将产生工程属性,如${project.artifactId}
在这里将是项目名:test-maven
,${project.version}
为0.1
,那么,当我们新建完一个工程后,我们将会有下面这些工程属性
内置属性 | 描述 | 对应项目 |
---|---|---|
${project.groupId} | 组织名称,一般是网址名称反着写,如www.google.com.cn,将写成cn.com.google | com.ericsson |
${project.artifactId} | 项目名称,我们的项目名 | test-maven |
${project.version} | 版本号 | 0.1 |
${project.packaging} | 打包类型 | jar |
${project.build.finalName} | 项目打包输出文件的名称,默认为${project.artifactId}-${project.version} | test-maven-0.1.jar |
这里只给出了一部分,其余的可根据pom文件结构自动推出,如${project.name}
=test-maven
maven属性
由于maven安装以后,有全局配置settings.xml
文件,在maven的安装目录下,
其中也会有配置文件
如${settings.localRepository}
,这里对应我配置的C:\TempData\maven-workspace
,由于大家配置的不一致,这里不做详解
工程自定义属性
可以自定义变量,也可以修改工程已有的变量,在properties
属性节点下添加,如下所示
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<maven.compiler.encoding>UTF-8</maven.compiler.encoding>
<currentVersion>${project.version}</currentVersion>
<spring.version>4.3.18.RELEASE</spring.version>
<jetty.version>9.4.8.v20171121</jetty.version>
<jersey.version>2.26</jersey.version>
<jdbc.username>root</jdbc.username>
<jdbc.password>123456</jdbc.password>
<name>zhangsan</name>
<project.build.timestamp>yyyyMMdd-HHmm</project.build.timestamp>
</properties>
profiles分组属性,-P
我们构建maven项目的时候,根据传入id表示,可以取对应表示id下的环境变量,如mvn install -P dev
,那么${jdbc.username}
的值将为it
<profiles>
<profile>
<!-- 本地开发环境 -->
<id>dev</id>
<properties>
<profiles.active>dev</profiles.active>
<jdbc.username>it</jdbc.username>
</properties>
<activation>
<!-- 设置默认激活这个配置 -->
<activeByDefault>true</activeByDefault>
</activation>
</profile>
<profile>
<!-- 发布环境 -->
<id>release</id>
<properties>
<profiles.active>release</profiles.active>
<jdbc.username>root</jdbc.username>
</properties>
</profile>
<profile>
<!-- 测试环境 -->
<id>beta</id>
<properties>
<profiles.active>beta</profiles.active>
<jdbc.username>admin</jdbc.username>
</properties>
</profile>
</profiles>
传入参数属性,-D
如我们不要test阶段,我们可以使用参数控制clean package -Dmaven.test.skip=true
我们可以像运行java程序一样,通过参数形式传递属性,如mvn install -P dev -Dhaha=1234
,这里配置对应的haha参数
再将参数输出
如果要发送多个变量,请使用多个空格分隔符加-D:
mvn -DpropA=valueA -DpropB=valueB -DpropC=valueC clean package
系统变量、环境变量属性
环境变量是根据系统环境来取的,这里我们可以通过命令行mvn help:system
查看所有的属性
系统属性
系统属性直接配置${系统属性名}
,这里配置${sun.desktop}
,输出windows
环境属性
环境属性需要配置以env.开头的Maven属性引用,${env.环境属性名}
,这里配置${env.NUMBER_OF_PROCESSORS}
,输出4
maven使用
我们定义的属性可以在xml文件或者properties文件中使用
-
在xml中使用如下,任意位置替换
相当于一个占位符使用
-
properties文件中使用
新增一个jdbc.properties文件,文件内容如下
jdbc.username=${jdbc.username}
定一个属性
<profiles>
<profile>
<!-- 本地开发环境 -->
<id>dev</id>
<properties>
<profiles.active>dev</profiles.active>
<jdbc.username>it</jdbc.username>
</properties>
<activation>
<!-- 设置默认激活这个配置 -->
<activeByDefault>true</activeByDefault>
</activation>
</profile>
<profile>
<!-- 发布环境 -->
<id>release</id>
<properties>
<profiles.active>release</profiles.active>
<jdbc.username>root</jdbc.username>
</properties>
</profile>
<profile>
<!-- 测试环境 -->
<id>beta</id>
<properties>
<profiles.active>beta</profiles.active>
<jdbc.username>admin</jdbc.username>
</properties>
</profile>
</profiles>
配置一个resource文件的包含,配置属性filtering置为true,将替换classes下面的文件
<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
<includes>
<include>**/*.properties</include>
</includes>
</resource>
</resources>
执行命令:mvn clean install -P release
,查看classes下面的文件