1

允许构建单个模块并确保将对父 pom 的更改上传到本地存储库的 maven 方式是什么?

假设我有三个模块:一个父母,两个孩子(dbmod,appmod)

  • 父级:dependencyManagement 定义 jdbc-foo 1.5
  • dbmod: dependencies 定义 jdbc-foo 从父级获取版本
  • appmod:依赖于 dbmod

情况

  1. 我从使用 jdbc-foo 1.5 的父级获取 parent-pom,使用 jdbc-foo 1.5 和 appmod 的 dbmod 构建。
  2. 我将源代码控制和父 pom 更改更新为 jdbc-foo 1.6
  3. 我在 dbmod 目录中构建
  4. 我在 appmod 目录中构建

    appmod 从本地存储库获取 dbmod 并使用父 pom maven 问题的本地 repo 版本:“[警告] ...dbmod:jar:3.5.0-SNAPSHOT 的 POM 无效,传递依赖项(如果有)将不可用:为 dbmod:3.5.0-SNAPSHOT 构建有效模型时遇到了 1 个问题"

    编译失败,因为我的代码依赖于对 jdbc-foo 1.6 更改的访问

选项

我可以通过以下方式解决问题:

  • 手动安装父pom文件的问题,(mvn install-file ...)
  • 从父级不必要的建筑物构建:我一直在构建所有模块
  • 从父级构建选择所需的项目并使用also-make (mvn -am -pl :appmod ...) 不必要的构建:我必须一直构建所有的部门

第一个选项是个问题,因为我需要知道我需要这样做。第二个和第三个选项还要求我弄清楚我需要这样做,或者一直构建所有的 deps / all mods,这在大型系统中可能是一个问题。

如果有一个配置设置会强制父安装而不是“-am -pl :mod”,或者这是处理这种情况的“maven 方式”?

谢谢

彼得

(如果 maven 不能这样做,那么我可以纠正一个包装脚本,该脚本检查父级与本地 repo 父级并强制安装差异)

4

2 回答 2

0

从父 pom 构建就可以了。这是与您提到的反应器选项一起推荐的方式。如果你不运行 clean 它不会重复不必要的努力。

于 2012-09-23T04:44:28.443 回答
-1

Maven 方式是始终从父级构建。构建所有模块的问题到底是什么?如果代码没有变化,我很确定 maven 不会真正重建子模块,所以它非常快。但即使是这样,为什么这对你来说是个问题?

要尝试的另一件事是<relativePath>在模块的父声明中使用。这样 maven 将从文件系统而不是从已安装的父工件中获取父 pom

<parent>
  <groupId>com.mycompany.app</groupId>
  <artifactId>myapp</artifactId>
  <version>${app.version}</version>
  <relativePath>.../parent/pom.xml</relativePath>
</parent>
于 2012-09-22T01:11:07.433 回答