如何在 Maven 多模块项目中访问其他模块 POM 中定义的属性。

11
在A.B.C的POM文件中,我定义了一个名为"abc"的属性,其中A、B、C是模块。现在我想在A.D.F模块的POM文件中访问该属性。

在A.B.C的POM文件中,我定义了一个名为"abc"的属性,其中A、B、C是模块。现在我想在A.D.F模块的POM文件中访问该属性。

<properties>
<A.B.C>${buildNumber}</A.B.C>
</properties>

<plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>buildnumber-maven-plugin</artifactId>
            <version>1.3</version>
            <executions>
                <execution>
                <id>buildnumber</id>
                    <phase>validate</phase>
                    <goals>
                        <goal>create</goal>
                    </goals>
                </execution>
            </executions>
            <configuration>
            <timestampFormat>{0,date,dd-MM-yyyy HH:mm:ss}</timestampFormat>
            <doCheck>false</doCheck>
            <doUpdate>false</doUpdate>
            <providerImplementations>
                <svn>javasvn</svn>
            </providerImplementations>
            <revisiononscmfailure>

                    <!-- 71 Generate sequence build number based on: 72 build number and 
                        timestamp 73 -->

                    <format>Build: #{0} ({1,date})</format>

                    <items>

                        <item>buildNumber\d*</item>

                        <item>timestamp</item>

                    </items>

                </revisiononscmfailure>
        </configuration>
        <dependencies>
            <dependency>
                <groupId>com.google.code.maven-scm-provider-svnjava</groupId>
                <artifactId>maven-scm-provider-svnjava</artifactId>
                <version>2.1.1</version>
            </dependency>
            <dependency>
                <groupId>org.tmatesoft.svnkit</groupId>
                <artifactId>svnkit</artifactId>
                <version>1.8.5</version>
            </dependency>
        </dependencies>

        </plugin>

我在 A.D.F 模块的 pom 文件中,将 ${A.B.C} 作为依赖项版本的值。

<dependency>
        <groupId></groupId>
        <artifactId></artifactId>
        <version>${A.B.C}</version>
        <type>bundle</type>
    </dependency>

所以它给了我一个错误:

bundle必须是一个有效的版本,但是它是 ${A.B.C}。

编辑:

或者我可以以某种方式使用C模块的版本,因为我已经定义了:

<version>${A.B.C}</version> 

你使用的Maven版本是哪个? - khmarbaise
我建议升级到Maven 3.2.1,这样你就可以在版本中使用${revision}${changelist}${sha1} - khmarbaise
2个回答

3

这些模块是否有一个共同的父pom?如果您想将它们链接在一起,最好让它们通过父POM共享属性,特别是如果您希望在多个模块之间紧密耦合模块版本。


A是所有模块的父级。但是,由于buildnumber是由buildnumber-maven-plugin提供的,我该如何在父POM中定义属性<A.B.C>${buildNumber}</A.B.C>? - HimanshuR
所以,如果我理解正确的话,buildnumber插件在构建时定义了版本。因此,子POM无法正确继承版本号?如果是这种情况,那么如果你将buildnumber写入属性文件,并让子POM使用属性文件插件从由构建子模块C生成的文件中读取buildnumber呢?我假设你会先构建C再构建F。听起来有点hacky,我知道 :) - coffeeaddict
我喜欢你的解决方案,但是不知道如何做。 - HimanshuR
如何在具有嵌套模块的多模块项目中访问相同的属性文件。 - HimanshuR
你尝试过从父文件中读取并在所有子项目中继承属性吗?(在子项目的pom文件中使用parent标签)如果我不能提供更多的细节,那我表示抱歉。我只是在将我过去实现的不同解决方案组合在一起,但从未同时实施过。 - coffeeaddict
虽然我同意这位发帖者的观点,但有时候工作的限制会使这变得不可能。 - Shadow Man

2

1
我标记了这个链接,因为它非常有用。然而,我犹豫了,因为您没有添加关于此问题的链接内容摘要。 - Shadow Man

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接