maven - 导入 Material list 中使用的 maven 属性(bom)

标签 maven properties pom.xml

我们有一个项目布局,其中包含 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>

projectA 中的顶级 pom 将依赖项管理部分中的 bom 导入为
<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>group</groupId>
            <artifactId>bom</artifactId>
            <version>1.0.0</version>
            <scope>import</scope>
            <type>pom</type>
        </dependency>
    </dependencies>
</dependencyManagement>

这一切都很好,我们有集中的依赖定义。

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

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

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

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

最佳答案

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

http://maven.apache.org/guides/introduction/introduction-to-dependency-mechanism.html

我不喜欢这个解决方案,因为如果你已经从父级继承,你就会在这里遇到多重继承问题。

BOM 似乎不符合您的要求。它只组装一堆依赖项,例如父项目的依赖项管理部分的提取。但是,它的内部结构对您的项目应该无关紧要。如果 BOM 在结构上发生变化,您的项目将不会受到影响。也许在这里不使用 BOM 是更合适的解决方案,而是选择依赖项并在此处使用您自己的版本属性。取决于 BOM 的复杂程度。

因此,要么使用 BOM 作为父级,要么完全忽略 BOM,因为您需要的比 BOM 提供的更多。

关于maven - 导入 Material list 中使用的 maven 属性(bom),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45963173/

相关文章:

java - 是否可以使用 org.codehaus.mojo :build-helper-maven-plugin to bundle native dlls into a war file?

java - 从azure sdk for java生成jar时出错

java - 属性文件不起作用

actionscript-3 - 在读取属性值之前如何测试对象上是否存在属性?

java - 如何在没有父 pom 的情况下从外部为我的 jar 设置版本,为依赖项生成可用的 pom.xml

java - 升级到 Java 11 JavaFX 令人头疼

android - 无法访问继承的库

java - 为什么 java.util.Properties 扩展 Hashtable<Object, Object> 而不是 Hashtable<String, String>?

eclipse - 为什么我收到 "Plugin execution not covered by lifecycle configuration with GWT"错误?

maven 3无法读取 Artifact 描述符