本文引用自https://www.cnblogs.com/EasonJim/p/6815365.html
在命令行使用属性时,是-D,比如:mvn -Dinput=test
引用官方的说明https://maven.apache.org/pom.html#Properties:
Properties
属性是了解POM基础知识的最后一个要素。Maven属性是值占位符,如Ant中的属性。它们的值可以通过使用符号${X}在POM中的任何位置访问,其中X是属性。
他们有五种不同的风格:
1、env.X:使用“env”来定义变量。将返回shell的环境变量。例如,${env.PATH}包含PATH环境变量。
注意:虽然环境变量本身在Windows上不区分大小写,但查找属性区分大小写。换句话说,虽然Windows shell为%PATH%和%Path%返回相同的值,但Maven区分 e n v . P A T H 和 {env.PATH}和 env.PATH和{env.Path}。对于Maven 2.1.0,为了可靠性,环境变量的名称被归一化为所有大写。
2、project.x:POM中的点(.)记号路径将包含相应元素的值。例如:可以通过${project.version}访问1.0。
3、settings.x:settings.xml中的点(.)标注路径将包含相应的元素的值。例如:false</ settings>可通过${settings.offline}访问。
4、Java系统属性:可通过java.lang.System.getProperties()访问的所有属性都可用作POM属性,如${java.home}。
5、x:在POM中的元素中设置。value的值可以用作${someVar}。
而在第2点中访问pom.xml文件的属性时,其实还有一些内置的变量,如下:
p r o j e c t . b a s e d i r : 这 引 用 了 m o d u l e / p r o j e c t 的 根 文 件 夹 ( 当 前 p o m . x m l 文 件 所 在 的 位 置 ) , 还 可 以 简 化 的 写 法 : {project.basedir}:这引用了module/project的根文件夹(当前pom.xml文件所在的位置),还可以简化的写法: project.basedir:这引用了module/project的根文件夹(当前pom.xml文件所在的位置),还可以简化的写法:{basedir}
以上更多用法参考:http://maven.apache.org/ref/3.5.0/maven-model-builder/#Model_Interpolation
${project.build.directory}:这表示默认的target文件夹。
${project.build.outputDirectory}:默认情况下表示target/classes文件夹。
${project.build.testOutputDirectory}:这表示默认的target/test-classes文件夹。
${project.build.sourceDirectory}:这表示默认情况下src/main/java文件夹。
${project.build.testSourceDirectory}:这表示默认情况下src/test/java文件夹。
p r o j e c t . b u i l d . f i n a l N a m e : 默 认 情 况 下 定 义 为 {project.build.finalName}:默认情况下定义为 project.build.finalName:默认情况下定义为{project.artifactId}-${project.version}。
${project.version}:这可以在必须编写文字版本的位置使用,否则,特别是如果您在多模块构建模块间依赖关系。
以上更多用法参考:http://maven.apache.org/pom.html#The_Super_POM
s e t t i n g s . l o c a l R e p o s i t o r y : 它 引 用 了 本 地 存 储 库 的 位 置 。 这 是 默 认 的 {settings.localRepository}:它引用了本地存储库的位置。这是默认的 settings.localRepository:它引用了本地存储库的位置。这是默认的{home}/.m2/repository。
以上更多用法参考:http://maven.apache.org/pom.html#Properties
以上参考:https://cwiki.apache.org/confluence/display/MAVEN/Maven+Properties+Guide
而针对第5点时应该是项目上最多使用的,比如以下为项目实践的简单pom.xml:
复制代码
<?xml version="1.0" encoding="UTF-8"?>
4.0.0
com.jsoft.test
test-maven
1.0-SNAPSHOT
<test.uuid>123</test.uuid>
<jdbc.driverClassName>com.mysql.jdbc.Driver</jdbc.driverClassName>
<jdbc.url>jdbc:mysql://localhost/stock?createDatabaseIfNotExist=true&useUnicode=true&characterEncoding=utf-8&autoReconnect=true</jdbc.url>
<jdbc.username>root</jdbc.username>
<jdbc.password>123456</jdbc.password>
<jdbc.validationQuery>SELECT 1 + 1</jdbc.validationQuery>
true
p
r
o
j
e
c
t
.
b
a
s
e
d
i
r
/
s
r
c
/
m
a
i
n
/
r
e
s
o
u
r
c
e
s
/
{project.basedir}/src/main/resources/
project.basedir/src/main/resources/{test.uuid}
*.properties
复制代码
可以看出只要在properties节点配置了自定义属性即可在任意地方使用,形式如${x}。
当然除了在pom.xml使用自定义属性外,还可以在properties文件中使用,比如项目文件src/main/resources/jdbc.properties的文件,写入如下所示:
jdbc.driverClassName=
j
d
b
c
.
d
r
i
v
e
r
C
l
a
s
s
N
a
m
e
j
d
b
c
.
u
r
l
=
{jdbc.driverClassName} jdbc.url=
jdbc.driverClassNamejdbc.url={jdbc.url}
jdbc.username=
j
d
b
c
.
u
s
e
r
n
a
m
e
j
d
b
c
.
p
a
s
s
w
o
r
d
=
{jdbc.username} jdbc.password=
jdbc.usernamejdbc.password={jdbc.password}
jdbc.validationQuery=${jdbc.validationQuery}