赞
踩
MAVEN pom文件中可以使用 ${} 引用键值对属性,MAVEN的属性主要包括以下几类
内置属性值 | 属性描述 |
---|---|
basedir | 表示项目根目录,即包含pom.xml文件的目录 |
version | 表示项目版本 |
project.basedir | 同basedir |
project.baseUri | 表示项目文件地址 |
maven.build.timestamp | 表示项目构件开始时间 |
maven.build.timestamp.format | 表示属性${maven.build.timestamp}的展示格式,默认值为yyyyMMdd-HHmm,可自定义其格式,其类型可参考Java.text.SimpleDateFormat。 |
使用方式如下:
<properties>
<maven.build.timestamp.format>
yyyy-MM-dd HH:mm:ss
</maven.build.timestamp.format>
</properties>
xml标签属于层叠式标签,也就是一层套一层的形式,maven支持以 . 链接标签层级来访问 pom.xml 和 settings.xml 中所有的标签值。
pom.xml 根标签为project,因而可以使用 project.xxx 来访问pom.xml中所有属性,比如 ${project.build.finalName}
即表示如下代码中finalName标签中的值
<project>
<build>
<finalName>my-web</finalName>
</build>
</project>
settingx.xml 根标签为settings, 因而可以使用 settings.xxx 来访问settings.xml中所有属性,比如
${settings.localRepository}
即可以获得本地仓库的配置地址
<settings xmlns="http://maven.apache.org/SETTINGS/1.2.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.2.0 http://maven.apache.org/xsd/settings-1.2.0.xsd">
<!-- localRepository
| The path to the local repository maven will use to store artifacts.
|
| Default: ${user.home}/.m2/repository -->
<localRepository>/usr/local/maven/repo</localRepository>
</settings>
注:xml标签支持可重复标签,例如 ${project.dependecies.dependency}
可以表示多个值,因而在取值时maven无法识别你匹配的哪一个值,所以要注意你引用的属性是否是唯一的。
例如常用的 ${java.version}
表示jdk的版本,可以在pom.xml中使用的java环境变量可以通过 System.getProperties()
方法查看。
package cn.kerninventor.demo.multithread.classloader; import java.util.Properties; /** * @author kern */ public class JavaPropertiesPrinter { public static void println() { Properties properties = System.getProperties(); properties.forEach((k, v) -> { System.out.println("${" + k + "}=" + v); }); } public static void main(String[] args) { JavaPropertiesPrinter.println(); } } /** 输出如下 ${sun.cpu.isalist}= ${ftp.nonProxyHosts}=local|*.local|169.254/16|*.169.254/16 ${socksNonProxyHosts}=local|*.local|169.254/16|*.169.254/16 ${sun.io.unicode.encoding}=UnicodeBig ${sun.cpu.endian}=little ${java.vendor.url.bug}=http://www.azulsystems.com/support/ ${file.separator}=/ ${java.vendor}=Azul Systems, Inc. ${sun.boot.class.path}=/Library/Java/JavaVirtualMachines/zulu-8.jdk/Contents/Home/jre/lib/resources.jar:/Library/Java/JavaVirtualMachines/zulu-8.jdk/Contents/Home/jre/lib/rt.jar:/Library/Java/JavaVirtualMachines/zulu-8.jdk/Contents/Home/jre/lib/sunrsasign.jar:/Library/Java/JavaVirtualMachines/zulu-8.jdk/Contents/Home/jre/lib/jsse.jar:/Library/Java/JavaVirtualMachines/zulu-8.jdk/Contents/Home/jre/lib/jce.jar:/Library/Java/JavaVirtualMachines/zulu-8.jdk/Contents/Home/jre/lib/charsets.jar:/Library/Java/JavaVirtualMachines/zulu-8.jdk/Contents/Home/jre/lib/jfr.jar:/Library/Java/JavaVirtualMachines/zulu-8.jdk/Contents/Home/jre/classes ${java.ext.dirs}=/Users/kern/Library/Java/Extensions:/Library/Java/JavaVirtualMachines/zulu-8.jdk/Contents/Home/jre/lib/ext:/Library/Java/Extensions:/Network/Library/Java/Extensions:/System/Library/Java/Extensions:/usr/lib/java ${java.version}=1.8.0_292 ${java.vm.info}=mixed mode ${awt.toolkit}=sun.lwawt.macosx.LWCToolkit ${user.language}=zh ${java.specification.vendor}=Oracle Corporation ${sun.java.command}=cn.kerninventor.demo.multithread.classloader.JavaPropertiesPrinter ${java.home}=/Library/Java/JavaVirtualMachines/zulu-8.jdk/Contents/Home/jre ${sun.arch.data.model}=64 ${java.vm.specification.version}=1.8 ${java.class.path}=/Library/Java/JavaVirtualMachines/zulu-8.jdk/Contents/Home/jre/lib/charsets.jar:/Library/Java/JavaVirtualMachines/zulu-8.jdk/Contents/Home/jre/lib/crs-agent.jar:/Library/Java/JavaVirtualMachines/zulu-8.jdk/Contents/Home/jre/lib/ext/cldrdata.jar:/Library/Java/JavaVirtualMachines/zulu-8.jdk/Contents/Home/jre/lib/ext/dnsns.jar:/Library/Java/JavaVirtualMachines/zulu-8.jdk/Contents/Home/jre/lib/ext/jaccess.jar:/Library/Java/JavaVirtualMachines/zulu-8.jdk/Contents/Home/jre/lib/ext/legacy8ujsse.jar:/Library/Java/JavaVirtualMachines/zulu-8.jdk/Contents/Home/jre/lib/ext/localedata.jar:/Library/Java/JavaVirtualMachines/zulu-8.jdk/Contents/Home/jre/lib/ext/nashorn.jar:/Library/Java/JavaVirtualMachines/zulu-8.jdk/Contents/Home/jre/lib/ext/openjsse.jar:/Library/Java/JavaVirtualMachines/zulu-8.jdk/Contents/Home/jre/lib/ext/sunec.jar:/Library/Java/JavaVirtualMachines/zulu-8.jdk/Contents/Home/jre/lib/ext/sunjce_provider.jar:/Library/Java/JavaVirtualMachines/zulu-8.jdk/Contents/Home/jre/lib/ext/sunpkcs11.jar:/Library/Java/JavaVirtualMachines/zulu-8.jdk/Contents/Home/jre/lib/ext/zipfs.jar:/Library/Java/JavaVirtualMachines/zulu-8.jdk/Contents/Home/jre/lib/jce.jar:/Library/Java/JavaVirtualMachines/zulu-8.jdk/Contents/Home/jre/lib/jfr.jar:/Library/Java/JavaVirtualMachines/zulu-8.jdk/Contents/Home/jre/lib/jsse.jar:/Library/Java/JavaVirtualMachines/zulu-8.jdk/Contents/Home/jre/lib/management-agent.jar:/Library/Java/JavaVirtualMachines/zulu-8.jdk/Contents/Home/jre/lib/resources.jar:/Library/Java/JavaVirtualMachines/zulu-8.jdk/Contents/Home/jre/lib/rt.jar:/Library/Java/JavaVirtualMachines/zulu-8.jdk/Contents/Home/lib/dt.jar:/Library/Java/JavaVirtualMachines/zulu-8.jdk/Contents/Home/lib/jconsole.jar:/Library/Java/JavaVirtualMachines/zulu-8.jdk/Contents/Home/lib/tools.jar:/Users/kern/IdeaRepo/gitee/multithread-demo/classloader/target/classes:/Users/kern/.m2/repository/org/projectlombok/lombok/1.18.20/lombok-1.18.20.jar:/Users/kern/.m2/repository/org/apache/commons/commons-lang3/3.10/commons-lang3-3.10.jar:/Applications/IntelliJ IDEA.app/Contents/lib/idea_rt.jar ${user.name}=kern ${file.encoding}=UTF-8 ${java.specification.version}=1.8 ${java.awt.printerjob}=sun.lwawt.macosx.CPrinterJob ${user.timezone}= ${user.home}=/Users/kern ${http.nonProxyHosts}=local|*.local|169.254/16|*.169.254/16 ${os.version}=11.4 ${sun.management.compiler}=HotSpot 64-Bit Tiered Compilers ${java.specification.name}=Java Platform API Specification ${java.class.version}=52.0 ${java.library.path}=/Users/kern/Library/Java/Extensions:/Library/Java/Extensions:/Network/Library/Java/Extensions:/System/Library/Java/Extensions:/usr/lib/java:. ${sun.jnu.encoding}=UTF-8 ${os.name}=Mac OS X ${java.vm.specification.vendor}=Oracle Corporation ${java.io.tmpdir}=/var/folders/_q/njsjbxp51sg80_3dzqhgzdf40000gn/T/ ${line.separator}= ${java.endorsed.dirs}=/Library/Java/JavaVirtualMachines/zulu-8.jdk/Contents/Home/jre/lib/endorsed ${os.arch}=aarch64 ${java.awt.graphicsenv}=sun.awt.CGraphicsEnvironment ${java.runtime.version}=1.8.0_292-b10 ${java.vm.specification.name}=Java Virtual Machine Specification ${user.dir}=/Users/kern/IdeaRepo/gitee/multithread-demo ${user.country}=CN ${sun.java.launcher}=SUN_STANDARD ${sun.os.patch.level}=unknown ${java.vm.name}=OpenJDK 64-Bit Server VM ${file.encoding.pkg}=sun.io ${path.separator}=: ${java.vm.vendor}=Azul Systems, Inc. ${java.vendor.url}=http://www.azulsystems.com/ ${jdk.vendor.version}=Zulu 8.54.0.21-CA-macos-aarch64 ${gopherProxySet}=false ${sun.boot.library.path}=/Library/Java/JavaVirtualMachines/zulu-8.jdk/Contents/Home/jre/lib ${java.vm.version}=25.292-b10 ${java.runtime.name}=OpenJDK Runtime Environment **/
即各个操作系统中的环境变量,maven支持以 ${env.xxx} env前缀来访问操作系统的环境变量,例如 ${env.PATH} 即表示了当前操作系统的PATH变量。可以使用的系统环境变量不同的操作系统查看方式不同。
windows下通过右键我的电脑-》属性-》高级系统设置-》高级-》环境变量查看,或者win+R呼出任务行键入sysdm.cpl进行查看。
类Unix操作系统,则可以在shell命令行界面键入 env 命令查看。
用户可以在maven的pom.xml文件中使用properties标签定义自己的属性。例如下例中自定义的jdk-version属性在compiler插件中被使用。
<?xml version="1.0" encoding="UTF-8"?> <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 https://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>cn.kerninventor</groupId> <artifactId>spring-cloud-demo</artifactId> <version>1.0.0-SNAPSHOT</version> <packaging>pom</packaging> <properties> <jdk-version>1.8</jdk-version> </properties> <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.8.1</version> <configuration> <target>${jdk-version}</target> <source>${jdk-version}</source> </configuration> </plugin> </plugins> </build> </project>
在什么场景下使用自定义属性呢? 这里大概整理了几种情况
现在有些开发中使用到的类似内置属性的配置其实是重写了引入依赖中定义的属性,例如 <project.build.sourceEncoding> UTF-8</project.build.sourceEncoding> 其实是spring-boot-starter-parent 构件中定义的属性, 因此,如果你不清楚一个属性的出处(可以查阅官方文档),且该属性并非来自官方的内置属性,那么建议谨慎使用。
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-dependencies</artifactId> <version>2.5.2</version> </parent> <artifactId>spring-boot-starter-parent</artifactId> <packaging>pom</packaging> <name>spring-boot-starter-parent</name> <description>Parent pom providing dependency and plugin management for applications built with Maven</description> <properties> <!--这里自定义的属性是为了构件时使用的resources插件的编码定义一个格式, 之所以不直接在相关引用出书写编码格式,是为了方便引用依赖的用户自定义他的编码格式 --> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> </properties> <build> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-resources-plugin</artifactId> <configuration> <propertiesEncoding>${project.build.sourceEncoding}</propertiesEncoding> <delimiters> <delimiter>${resource.delimiter}</delimiter> </delimiters> <useDefaultDelimiters>false</useDefaultDelimiters> </configuration> </plugin> </build> </project>
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。