簡體   English   中英

在POM.xml中使用環境變量不起作用

[英]Use of environment variable in POM.xml doesn't work

我試圖提取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

在pom.xml中使用環境變量相比, 在pom.xml中更新Versions有更好的選擇: Versions Maven Plugin 這使您可以使用maven命令行更改pom.xml。

示例場景

項目結構:
+ P(家長-版本1.0.0-快照)
-C1(子項目1-版本1.0.0-快照)
-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>

子項目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>

子項目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>

您定義的變量僅在同一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>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM