当所有模块的版本由单个属性

时间:2017-01-18 07:19:53

标签: java maven multi-module

我有一个具有以下层次结构的多模块项目:

parent-build项目pom.xml

...
    <groupId>com.my.project</groupId>
    <artifactId>parent-build</artifactId>
    <packaging>pom</packaging>
    <name>parent-build</name>
    <version>${version.product}</version>
    <properties>
        <version.product>1.0</version.product>
    </properties>
    ...

build-all项目pom.xml

...
    <parent>
        <artifactId>parent-build</artifactId>
        <groupId>com.my.project</groupId>
        <version>${version.product}</version>
        <relativePath>../parent-build/pom.xml</relativePath>
    </parent>
    <groupId>com.my.project</groupId>
    <packaging>pom</packaging>
    <modules>
        <module>../child-1</module>
        <module>../child-2</module>
    </modules>
    ...

child-2项目pom.xml

...
    <parent>
        <artifactId>parent-build</artifactId>
        <groupId>com.my.project</groupId>
        <version>${version.product}</version>
        <relativePath>../parent-build/pom.xml</relativePath>
    </parent>
    <groupId>com.my.project</groupId>
    <artifactId>child-2</artifactId>
    <packaging>jar</packaging>
    <version>${version.product}</version>
    ...
    <dependencies>
        <dependency>
            <groupId>com.my.project</groupId>
            <artifactId>child-1</artifactId>
            <version>${version.product}</version>
        </dependency>
        ...
    </dependencies>
    ...

child-1项目pom.xml

...
    <parent>
        <artifactId>parent-build</artifactId>
        <groupId>com.my.project</groupId>
        <version>${version.product}</version>
        <relativePath>../parent-build/pom.xml</relativePath>
    </parent>
    <groupId>com.my.project</groupId>
    <artifactId>child-1</artifactId>
    <packaging>jar</packaging>
    <version>${version.product}</version>
    ...

我想构建所有相同版本的jar,这个版本应该在单个地方指定。 我在parent-build pom.xml中声明了一个属性

现在当我在build-all项目上mvn clean install时,它按照指定的模块顺序构建所有项目。 没关系。

但在某些情况下,我只想构建child-2项目。

即,我可以说我在child-2项目中做了一些更改,并且只想构建这个项目。 此方案的问题是,它找不到属性值version.product

编辑:

以下是我在构建child-2项目时遇到的错误

Could not transfer artifact com.my.project:parent-build:pom:${version.product} from/to central (http://repo1.maven.org/maven2): Illegal character in path at index 66: http://repo1.maven.org/maven2/com/my/project/parent-build/${version.product}/parent-build-${version.product}.pom

请帮忙。

提前致谢。

2 个答案:

答案 0 :(得分:0)

首先我会反对这一点,但我知道你可能有一个模块还没有正常工作等。过去我曾使用父pom中的配置文件来控制模块列表:

<profiles>
    <profile>
        <id>all</id>
        <activation>
            <activeByDefault>true</activeByDefault>
        </activation>
        <modules>
            <module>1</module>
            <module>2</module>
            <module>3</module>
            <module>4</module>
        </modules>
    </profile>
    <profile>
        <id>profile1</id>
        <modules>
            <module>1</module>
            <module>2</module>
            <module>3</module>
        </modules>
    </profile>
</profiles>

然后:

1)mvn clean install - 你将获得所有模块

2)mvn clean install -Pprofile1你只能得到模块1,2&amp; 3。

答案 1 :(得分:0)

flatten-maven-plugin

这就是我想要的。

此插件将替换属性中指定的版本,并使用所有有效pom.xml中的实际属性值。

所以稍后如果您单独构建任何子项,它将成功构建。

干杯