Maven pom.xml中的变量

背景

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. 在名称中使用变量

官网文档中提到,变量有三种:

  1. Project Model Variables
    {project.version}, ${project.build.sourceDirectory}
  2. Special Variables
    project.basedir, project.baseUri, maven.build.timestamp
  3. 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}
                ${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

你可能感兴趣的:(Maven pom.xml中的变量)