在POM.xml中使用环境变量并不起作用

时间:2014-11-18 01:50:03

标签: java maven pom.xml

我试图将POM的版本号和所有依赖项拉出到环境变量中。例如:

<project
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-    4.0.0.xsd"
    xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-    instance">
  <modelVersion>4.0.0</modelVersion>
  <artifactId>example-assembly</artifactId>
  <name>example-assembly</name>
  <properties>
    <current.version>${env.CURRENTVERSION}</current.version>
  </properties>
  <dependencies>
    <dependency>
      <groupId>com.example.demo</groupId>
      <artifactId>exceptions</artifactId>
      <version>${current.version}</version>
    </dependency>
  <dependencies>
  <packaging>war</packaging>
  <version>${current.version}</version>
</project>

通过上面的设置,当我运行mvn clean命令时,我收到以下错误:

dependencies.dependency.version for example-assembly:war must be a valid version but is '${env.CURRENTVERSION}'

关于可能出现什么问题的任何想法?

注意:我在Windows OS中运行maven

2 个答案:

答案 0 :(得分:1)

对于更新pom.xml中的版本,有一个更好的选择,而不是使用pom.xml中的环境变量:Versions Maven Plugin。这允许您使用maven命令行更改pom.xml。

示例场景

项目结构:
  + P(父母 - 版本1.0.0-SNAPSHOT)
   - C1(儿童项目1 - 版本1.0.0-SNAPSHOT)
   - C2(儿童项目2 - 版本1.0.0-SNAPSHOT也取决于C1)

任务

您想要将所有pom.xml文件中的版本更改为1.0.1-SNAPSHOT

父pom.xml

<project> <modelVersion>4.0.0</modelVersion> <groupId>sample</groupId> <artifactId>p</artifactId> <version>1.0.0-SNAPSHOT</version> <name>Parent</name> <packaging>pom</packaging> <modules> <module>c1</module> <module>c2</module> </modules> </project>

子项目1 pom.xml

<project> <modelVersion>4.0.0</modelVersion> <artifactId>c1</artifactId> <name>Child Project 1</name> <packaging>jar</packaging> <parent> <groupId>sample</groupId> <artifactId>p</artifactId> <version>1.0.0-SNAPSHOT</version> </parent> </project>

Child Project 2 pom.xml

<project> <modelVersion>4.0.0</modelVersion> <artifactId>c2</artifactId> <name>Child Project 2</name> <packaging>jar</packaging> <parent> <groupId>sample</groupId> <artifactId>p</artifactId> <version>1.0.0-SNAPSHOT</version> </parent> <dependencies> <dependency> <groupId>sample</groupId> <artifactId>c1</artifactId> <version>1.0.0-SNAPSHOT</version> </dependency> </dependencies> </project>

命令

在所有pom.xml文件中设置新版本的命令
mvn -B -DnewVersion=1.0.1-SNAPSHOT versions:set
如果新版本由环境变量CURRENTVERSION
表示 mvn -B -DnewVersion=$CURRENTVERSION versions:set
这里-B表示--batch-mode(因此不会在控制台上提示新版本)

结果文件为

父pom.xml

<project> <modelVersion>4.0.0</modelVersion> <groupId>sample</groupId> <artifactId>p</artifactId> <version>1.0.1-SNAPSHOT</version> <name>Parent</name> <packaging>pom</packaging> <modules> <module>c1</module> <module>c2</module> </modules> </project>

子项目1 pom.xml

<project> <modelVersion>4.0.0</modelVersion> <artifactId>c1</artifactId> <name>Child Project 1</name> <packaging>jar</packaging> <parent> <groupId>sample</groupId> <artifactId>p</artifactId> <version>1.0.1-SNAPSHOT</version> </parent> </project>

Child Project 2 pom.xml

<project> <modelVersion>4.0.0</modelVersion> <artifactId>c2</artifactId> <name>Child Project 2</name> <packaging>jar</packaging> <parent> <groupId>sample</groupId> <artifactId>p</artifactId> <version>1.0.1-SNAPSHOT</version> </parent> <dependencies> <dependency> <groupId>sample</groupId> <artifactId>c1</artifactId> <version>1.0.1-SNAPSHOT</version> </dependency> </dependencies> </project>

答案 1 :(得分:0)

您定义的变量仅在同一个pom.xml中具有范围,不能在任何其他pom中使用。 如果要定义变量,请在maven的settings.xml中全局定义它。

在同一个pom,root pom或settings.xml中的某处定义变量env.CURRENTVERSION 或者提供准确的版本值。

<properties>
    <current.version>'your correct version'</current.version>
</properties>
e.g.
<properties>
    <current.version>1.0.0</current.version>
</properties>