【发布时间】:2019-02-06 17:14:31
【问题描述】:
我正在完成将独立的多项目 java 从 Ant 迁移到 Maven。我的项目的结构类似于以下:
parent-project
|_ Project A
| |
|_Project B
|_Project C
在父项目中没有代码,但我在 DependencyManager 中定义了最常用的依赖项及其版本。 ProjectA POM 也使用 parent-project 和 ProjectB 中定义的依赖关系,并从 ProjectA 调用方法。
我可以从 Eclipse 中完美地执行我的桌面应用程序作为 Maven 项目(目标:exec:java)。 m2e 提供的 Dependency Hierarchy 选项卡显示了正确的依赖顺序,与 dependency:build-classpath 显示的相同。
dependency:build-classpath tells Maven to output the path of the dependencies from the local repository in a classpath format to be used in java -cp. The classpath file may also be attached and installed/deployed along with the main artifact.
然而,尽管当我从 Eclipse 将独立应用程序作为 Maven 主项目启动时,我的项目依赖似乎是正确的,但当我将 jar 及其 jar 依赖项打包到子目录中时(使用 maven-jar 创建-插入)。
MyApp.jar
|_ \lib
|_ MyApp dependencies
|_ Maven projects jars
|_ Maven projects jars dependencies
我的清单文件包含一个等效于执行“mvn dependency:resolve”的类路径,但我仍然无法弄清楚这些 jar 的顺序来自哪里(即使更改 POM 似乎也没有对它有任何影响)。我的应用程序设法运行,但运行时库有很多问题,因为它没有使用它应该使用的那个。
dependency:resolve tells Maven to resolve all dependencies and displays the version
如果有人能指出这个问题的根源,我会永远感激不尽。
【问题讨论】:
-
你能更清楚你想要实现的目标吗?您是想构建一个包含所有依赖项的“胖罐子”,还是想通过路径引用它们?
-
我编辑了这个问题,试图提供更多细节。感谢您感兴趣。
-
你有重叠类的罐子吗?这是您需要在类路径上的 jar 中进行特殊排序的原因吗?
-
某些依赖项包括它们自己的依赖项,这些依赖项可能会在运行时发生冲突(例如:cxf、axis 和 jdk webservices)。但是,对我来说,谜团仍然是这种依赖关系:解决顺序与依赖关系:构建类路径的差异。这反映了我的清单的结果,因此也反映了打包后的应用程序依赖项。