我试图将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
答案 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
<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>
<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>
<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(因此不会在控制台上提示新版本)
<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>
<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>
<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>