【发布时间】:2014-08-07 05:12:31
【问题描述】:
我有一个 maven 项目,它依赖于另一个在公共 repo 上不可用的 maven 项目。我们称它们为项目 A 和 B,A 依赖于 B。
我目前正在将 B 声明为项目 A 中的外部依赖项,我已将其放入项目中的 repo 中。 (我在项目 B 中调用 mvn bundle:bundle 并将生成的 jar 复制到项目 A 中)问题是,通过这样做,maven 无法推断 B 依赖哪些依赖项,因为它是一个捆绑的 jar。
假设项目 A 和 B 都依赖于远程 maven 存储库中可用的另一个 maven 项目 C。项目 A 使用项目 C,版本 0.2,项目 B 使用项目 C,版本 0.1。但是,由于项目 B 正在作为外部捆绑 jar 加载到项目 A 中,因此 maven 不知道这一点。在运行时,项目 A 尝试调用 C 0.2 中存在但 C 0.1 中不存在的方法。但是maven通过先导入项目B然后C作为远程依赖来构建项目,所以C 0.2不在捆绑的项目A jar中,我们得到一个运行时methodNotFound错误。
知道我该如何处理吗?是否可以在捆绑的项目 B jar 中包含一个 pom.xml 文件,以便 maven 知道 B 依赖于 C 作为依赖项并且可以自行解决问题?
我目前解决这个问题的方法是在 maven 之外手动设置构建顺序,根本不使用它进行编译。
编辑:好的,我只需在与 jar 相同的目录中包含一个 (artifactId)-(version).pom 文件,以获取依赖项列表
【问题讨论】:
-
是什么阻止您将项目 B 的
mvn install放入本地存储库,然后让项目 A 依赖于该工件? -
我认为这本质上就是我正在做的,但它不允许项目 A 知道项目 B 依赖于什么(如果我在项目 A 中执行 mvn dependency:tree 它会将 B 显示为自己的叶)