背景
Java项目,想要在生成的jar名称中,带上部署环境的名称,如:xxx-${env}.jar
于是开始查资料,发现需要好几个概念,如Interpolation
, Variables
, Project Model Variables
, Special Variables
, Properties
, Profile
; 也经历里多次搜索和资料消化(资料附在每节内容之后),才拼凑出一个可行的方案。官网文档是不够完善的,多走了些弯路。
故有此文。
一. 如何自定义Maven 生成的jar的名称
设置 finalName
eureka-server-1.2
org.springframework.boot
spring-boot-maven-plugin
(19条消息) maven指定打的jar包的名字_tinysakura的博客-CSDN博客
二. 变量部分怎么处理
POM中有哪些可以引用的变量形式呢?
1. 在名称中使用变量
官网文档中提到,变量有三种:
- Project Model Variables
{project.version}, ${project.build.sourceDirectory} - Special Variables
project.basedir, project.baseUri, maven.build.timestamp - Properties
...
3.0
org.apache.maven
maven-artifact
${mavenVersion}
org.apache.maven
maven-core
${mavenVersion}
...
Project Interpolation and Variables
2. 第四种变量 - 环境变量
传入:
$ export JAVA_VERSION=9
$ mvn clean package
使用:
org.apache.maven.plugins
maven-compiler-plugin
3.8.1
${env.JAVA_VERSION}
Refer to Environment Variables in pom.xml | Baeldung
3. 第五种变量 - profile
声明一组profiles:
dev
dev
true
qa
qa
pre
pre
prod
prod
传入:
$ mvn clean package -Dmaven.test.skip=true -P product
使用:
${project.activeProfiles[0].id}
java - Maven - Can I reference profile id in profile definition? - Stack Overflow
6. 第X种变量 & 另眼相看 Properties
第1小节中,Properties
是作为Variables
中的一种被提到的,但在这份资料中(源自codehaus.org),Properties变成了统称,既覆盖了Variables
的范围, 也包含了环境变量(第2小节),Java系统属性,还完美地对第3小节提到的用法,给了基础有力的归类:自定义的Properties。
文中有这么一句话,All elements in the pom.xml, can be referenced with the project. prefix.
。我认为这是非常重要的基础概念,遗憾的是没有在前面的资料中看到过。所以,一切在POM中可以引用的变量,也都可以叫做Properties。概念上模糊的地方就在于此了。这里“把概念弄清”的含义,就变成为:概念定义原本就是那么模糊,但是从此知道它们有时可以指代对方。
今日份最重要参考资料:
predefined_maven_properties/README.md at master · cko/predefined_maven_properties`
另外发现一本Maven免费电子书。以后再找Maven资料,可以先在这里看看基础,搞清概念。
[Maven: The Complete Reference](Maven: The Complete Reference)
其中与今日话题相关的内容:
9.2. Maven Properties