【问题标题】:how to handle maven internal dependancies?如何处理 Maven 内部依赖关系?
【发布时间】:2020-05-25 23:46:06
【问题描述】:

有人可以告诉我处理 maven 项目内部依赖项的简单方法吗?现在我有以下事情。

  1. MainPorject 依赖于项目 A、B 和 C - Fat jar
  2. 项目 A 需要项目 B 进行编译 - Thin Jar
  3. 并且项目 b 依赖于项目 c 的编译 - Thin Jar

现在,我从各自的 repos 中手动编译来自 A、B 和 C 项目的所有 jar 文件,并将其放入 mainProject 以创建 fat jar。

有没有一种方法可以提供配置,当我编译 mainProject 时它会自动获取最新的代码 A、B 和 C 存储库?项目 A 和项目 B 也是如此。

【问题讨论】:

  • 我认为你必须像stackoverflow.com/a/15383584/2880879 中描述的那样构建项目 A B 和 C。如果您想为每个构建获取最新代码,那么您需要某种 CI 工具,例如 Jenkins 和 GoCD 等,但这不适用于开发环境。有关多模块 maven 项目结构构建示例的更多信息参考books.sonatype.com/mvnex-book/reference/multimodule.html
  • 如果您在正确配置的项目 A、B、C、MainProject 中拥有所有项目源,如之前的评论所建议的那样,并且它们在您构建之前是最新的(类似于 git pull不到一分钟),你不应该再需要任何东西了。当使用 A,B,C 作为 mainProject 的模块依赖项时,它们将在用于编译 mainProject 之前按照正确的顺序编译。

标签: java scala maven


【解决方案1】:

构建一个包含所有三个项目作为模块的多模块项目。然后你总是用最新的代码构建一切。并且 Maven 会注意以正确的顺序构建所有内容。

【讨论】:

    【解决方案2】:

    您需要一个多模块的 Maven 项目,使用以下设置:

    <!-- parent -->
    <groupId>com.stackoverflow</groupId>
    <artifactId>parent</artifactId>
    <version>1.0.0</version>
    
    <modules>
      <module>C</module>
      <module>B</module>
      <module>A</module>
      <module>Bundle</module>
    </modules>
    
    <!-- each module, optionally, if you want to let parent manage the dependency versions -->
    <parent>
      <groupId>com.stackoverflow</groupId>
      <artifactId>parent</artifactId>
      <version>1.0.0</version>
      <relativePath>../pom.xml</relativePath>
    </parent>
    

    pom.xml 位于根目录中,A、B、C、Bundle 是根目录的直接子级。

    <root>
    |   pom.xml
    |
    +---A
    |       pom.xml
    |
    +---B
    |       pom.xml
    |
    +---Bundle
    |       pom.xml
    |
    \---C
            pom.xml
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-09-20
      • 1970-01-01
      • 2015-05-11
      • 1970-01-01
      • 2021-12-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多