【问题标题】:Add bundled maven project as external jar将捆绑的 maven 项目添加为外部 jar
【发布时间】: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 显示为自己的叶)

标签: java maven jar


【解决方案1】:

如果您按照教程使用 maven(例如 here),它就可以工作。你为什么要bundle?为什么需要复制一些东西?只需在 A 的 pom.xml 中将 B 声明为依赖项并为 B 执行 mvn install,然后 A 将从本地 maven repo 中使用它。

另外,如果您只是将两个模块添加到单个项目中(我使用的是 IDEA),IDE 会识别依赖关系。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-07-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-24
  • 1970-01-01
相关资源
最近更新 更多