导入物料清单(bom)中使用的maven属性

导入物料清单(bom)中使用的maven属性,maven,properties,pom.xml,Maven,Properties,Pom.xml,我们有一个在bom文件中包含子模块和依赖项的项目布局: projectA bom module1 module2 实际版本号被定义为bom文件中的属性,因此对于每个依赖项,我们有如下内容 <properties> <guice-version>4.1.0</guice-version> </properties> <dependencies> &l

我们有一个在bom文件中包含子模块和依赖项的项目布局:

projectA
    bom           
    module1
    module2
实际版本号被定义为bom文件中的属性,因此对于每个依赖项,我们有如下内容

    <properties>
        <guice-version>4.1.0</guice-version>
    </properties>

<dependencies>
    <dependency>
        <groupId>com.google.inject</groupId>
        <artifactId>guice</artifactId>
        <version>${guice-version}</version>
    </dependency>
</dependencies>

4.1.0
com.google.inject
圭斯
${guice version}
projectA中的顶级pom使用导入dependecyManagement部分中的bom

<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>group</groupId>
            <artifactId>bom</artifactId>
            <version>1.0.0</version>
            <scope>import</scope>
            <type>pom</type>
        </dependency>
    </dependencies>
</dependencyManagement>

组
物料清单
1.0.0
进口
聚甲醛
这一切都很好,我们有集中的依赖项定义

但是,在构建过程中的某一点上,我们需要使用其中一个依赖项的版本。我希望在dependencyManagement部分导入bom表也会将属性导入顶级pom,但事实并非如此。也不可能使bom表成为具有节的顶级pom的子项,因为这会在pom文件之间创建循环依赖关系

我考虑将属性放入一个外部文件中,并在需要时使用maven属性插件读取它。这显然会出现在bom和pom文件中,我们需要在其中获取依赖项的版本。但是,由于bom没有打包为jar,因此必须对路径进行硬编码

我可以通过将属性复制到两个位置来修复它,但我不想这样做。是否有方法获取依赖项的版本,例如使用依赖项定义的属性


这个问题似乎很常见,我想知道我们是否在项目结构中做错了什么。在这种情况下,集中属性的标准方法是什么?

您可以尝试使用BOM作为父模块的父模块,因为BOM在技术上是POM的某种最小版本。这是官方Maven项目在这里描述的内容:

我不喜欢这个解决方案,因为如果您已经从父级进行了扩展,那么这里就会遇到多重继承问题

BOM表似乎不符合您的要求。它只组装一组依赖项,就像父项目的依赖项管理部分的摘录一样。但是,它的内部结构对您的项目不重要。如果BOM表在结构上发生更改,您的项目将不会受到影响。也许在这里不使用BOM表是更合适的解决方案,而是在这里选择依赖项并使用您自己的版本属性。这取决于BOM表的复杂程度


因此,要么将BOM用作父项,要么根本不考虑BOM,因为您需要的比BOM提供的更多。

请查看此问题及其接受的答案:。除了使用父POM,我认为没有其他方法可以集中属性。不,我不认为您遗漏了什么。maven中的bom支持有点“最重要”,将来可能应该得到更明确的支持。还有一个问题可能会有所帮助:-如果您感兴趣的依赖项在jar中包含一些元数据文件,那么classpath:variant可能会起作用。除此之外:你是否考虑编写自己的Maven插件?要读取bom表,然后读取要读取的属性?有一个类似的插件:它可能适合你。