如何在依赖项中配置/覆盖用作父版本的Maven属性?

时间:2017-12-08 22:54:55

标签: maven maven-3

假设有两个具有以下POM.XML的第三方Maven工件:

artifact1 POM.XML:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>group1</groupId>
<artifactId>artifact1</artifactId>
<version>${artifact1.version}</version>
<packaging>pom</packaging>
<properties>
    <artifact1.version>0.0.1-SNAPSHOT</artifact1.version>
</properties>
<modules>
    <module>../artifact2</module>
</modules>

artifact2 POM.XML:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<artifactId>artifact2</artifactId>
<parent>
    <groupId>group1</groupId>
    <artifactId>artifact1</artifactId>
    <version>${artifact1.version}</version>
    <relativePath>../artifact1</relativePath>
</parent>

它们通常使用

构建
mvn clean install

现在,如果我尝试在第三个POM.XML中重用artifact2:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>group2</groupId>
<artifactId>artifact3</artifactId>
<version>0.0.1-SNAPSHOT</version>
<dependencies>
    <dependency>
        <groupId>group1</groupId>
        <artifactId>artifact2</artifactId>
        <version>0.0.1-SNAPSHOT</version>
    </dependency>
</dependencies>

执行后......

mvn clean install

...构建失败,试图找到group1:artifact1:pom:$ {artifact1.version}

[ERROR] Failed to execute goal on project artifact3: Could not resolve dependencies for project group2:artifact3:jar:0.0.1-SNAPSHOT: Failed to collect dependencies at group1:artifact2:jar:0.0.1-SNAPSHOT: Failed to read artifact descriptor for group1:artifact2:jar:0.0.1-SNAPSHOT: Could not find artifact group1:artifact1:pom:${artifact1.version} in central (https://repo.maven.apache.org/maven2) -> [Help 1]

在命令行中设置属性也不起作用:

mvn clean install -Dartifact1.version=0.0.1-SNAPSHOT

如何将artifact2用作依赖项?

1 个答案:

答案 0 :(得分:0)

<parent>不允许变量。因为为了获得变量列表,Maven首先必须构建有效POM,为此需要解析父节点。

即使有某些版本的Maven允许安装这样的模块,它一般也不是一个可行的解决方案。 Maven的意识形态是所有依赖项(包括父项)都可以从仓库下载,并且不一定存在于本地FS /反应堆中。使用父依赖项定义中的属性会违反此规则。