java - 库层次结构的 Maven 依赖问题

标签 java maven

我已经在让 Maven 处理我的应用程序中模块之间的依赖关系时陷入困境,我想知道前进的最佳实践方法是什么。

我有一组用于我的所有应用程序的库,如下所示:

<shared-code>
  |---- common-lib
  |---- REST-lib
  |---- WebApp-lib
  |---- REST-Pom
  \---- WebApp-Pom

实际上还有更多文物,但重要的是:

  • common-lib 当我存储所有通用代码时
  • REST-lib 和 WebApp-lib 是依赖于 common-lib 的更专业的库
  • REST-Pom 和 WebApp-Pom 是不同类型应用程序的父 POM,最重要的是,它们依赖于 REST-lib 或 WebApp-lib
  • 中的所有 5 个 Artifact 都是一起发布的,并且始终具有相同的版本。

当我来写我的申请时,我得到了:

<application-code>
  |---- parent-pom
  |---- module-1
  |---- module-2
  \---- module-3
  • parent-pom 扩展 REST-Pom 或 WebApp-Pom 并添加项目特定信息(例如 SCM 信息)
  • module-1、module-2、module-3 均扩展parent-pom
  • 与 一样,其中的所有 Artifact 都与通用版本一起发布,但(重要的是)与 不同。

遵循my previous question的建议,我一直以以下形式定义依赖关系:

<dependency>
    <artifactId>common-lib</artifactId>
    <groupId>${project.groupId}</groupId>
    <version>${project.parent.version}</version>
</dependency>

我喜欢这个,因为当我对所有版本进行发布设置时,我不必遍历每个 POM。

问题是 ${project.parent.version} 是针对每个 POM 单独评估的,并且并不总是评估为相同的东西。

  • parent-pom 将 ${project.parent.version} 评估为 REST-Pom 或 WebApp-Pom 的版本,该版本与 common-lib 同步,因此我们得到了正确的值。
  • module-1、module-2 和 module-3 将 ${project.parent.version} 计算为parent-pom 的版本,这是不同的。

我(认为)我需要的是一个可以用作版本的表达式,它表示“这个项目的版本,而不是扩展它的东西”

最佳答案

父 pom 旨在保存子项包含的依赖项 ( <dependencies> ) 或按需包含的依赖项 ( <dependencyManagement> )。
dependencyManagement 中定义它们父pom的元素:

<dependencyManagement>
   <dependencies>
     <dependency>
        <artifactId>common-lib</artifactId>
        <groupId>${project.groupId}</groupId>
        <version>${project.parent.version}</version>
     </dependency>
      <!-- and so for -->
   </dependencies>
</dependencyManagement>

并让子项目在自己的 pom 中引用它们:

<dependencies>
  <dependency>
    <artifactId>common-lib</artifactId>
    <groupId>${project.groupId}</groupId>
  </dependency>
  <!-- and so for -->
</dependencies>

您可以注意到,依赖项版本不需要也不应该由子项设置,因为它是由父项 pom 定义的。

关于java - 库层次结构的 Maven 依赖问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48924859/

相关文章:

java - java源文件中的主类?

Maven2 - 仅部署主 pom

java - 使用 maven-javadoc-plugin 将 jar 添加到 doclet 类路径

java - 反汇编 Java JIT 编译的原生字节码

java - 如何正确使用模拟进行单元测试

java - 拥有两个 Maven Web 模块时如何正确使用 log4j?

java - IntelliJ Maven 项目有 UnsatisfiedLinkError : failed to locate library: lwjgl. dll

java - 错误 : Failed to execute goal org. apache.maven.plugins :maven-deploy-plugin:2. 8.2 :deploy 405,

java - 在 JavaFX 中逐像素生成图像,进度可见

java - 关闭时自动重新打开 Android 应用程序