使用Maven多模块项目时如何避免Java依赖地狱
几天来,我一直在与Java Maven多模块项目的依赖性作斗争 由于监督太少,开发人员设法创造了一种情况,即每个模块都可以自己编译,但不能作为一个整体一起编译。这会导致各种错误。找不到的类、铸造错误等。这些问题的原因似乎无法确定 我怀疑Maven在类路径上放置了相互冲突的依赖项。我认为我们把Maven的依赖关系搞得一团糟,但不管怎样,我不明白Maven对于多模块项目来说怎么会是一个性能如此差的框架 现在我可以理解,Maven在整体编译多个模块时会尝试做一些非常聪明有用的事情,但是Maven中不应该有一个选项,只配置一个模块以与其他模块隔离吗?有这样的选择吗?为了避免这种依赖 或者Maven的最佳实践是创建其他脚本,例如bash脚本,以便能够用一个命令单独编译多个模块 但这也是一个很难解决的问题,一些工具(例如SonarQube)需要能够在整个代码库上运行Maven,以便在SonarQube中创建单个项目 这会导致各种错误。找不到的类、铸造错误等。这些问题的原因似乎无法确定 你能发布错误消息吗?这将使分析您的问题变得更容易。这可能是由依赖冲突引起的,但是如果没有更多的信息,很难说 现在我可以理解,Maven在整体编译多个模块时会尝试做一些非常聪明有用的事情,但是Maven中不应该有一个选项,只配置一个模块以与其他模块隔离吗?有这样的选择吗?为了避免这种依赖 我不明白。如果两个模块互不依赖,则它们的构建将是独立的。如果一个模块依赖于另一个模块,并且它的构建由于版本冲突而失败,那么无论它是与其他模块一起构建还是单独构建,此构建都将失败 或者Maven的最佳实践是创建其他脚本,例如bash脚本,以便能够用一个命令单独编译多个模块 Maven遵循“约定优先于配置”的理念,这意味着遵循约定越多,配置越少,维护工作越少。创建各种各样的脚本违背了这一理念,也不是Maven的最佳实践 要管理多模块项目中的依赖关系冲突,通常需要一个父模块,其pom.xml如下所示使用Maven多模块项目时如何避免Java依赖地狱,java,maven,dependencies,Java,Maven,Dependencies,几天来,我一直在与Java Maven多模块项目的依赖性作斗争 由于监督太少,开发人员设法创造了一种情况,即每个模块都可以自己编译,但不能作为一个整体一起编译。这会导致各种错误。找不到的类、铸造错误等。这些问题的原因似乎无法确定 我怀疑Maven在类路径上放置了相互冲突的依赖项。我认为我们把Maven的依赖关系搞得一团糟,但不管怎样,我不明白Maven对于多模块项目来说怎么会是一个性能如此差的框架 现在我可以理解,Maven在整体编译多个模块时会尝试做一些非常聪明有用的事情,但是Maven中不应
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>...</groupId>
<artifactId>...</artifactId>
<version>...</version>
<packaging>pom</packaging>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>javax</groupId>
<artifactId>javaee-web-api</artifactId>
<version>6.0</version>
<scope>provided</scope>
</dependency>
...
</dependencies>
</dependencyManagement>
<modules>
...
</modules>
</project>
4.0.0
...
...
...
聚甲醛
爪哇
javaeewebapi
6
假如
...
...
在DependencyManagement元素中,定义所用库的版本。这样可以强制每个模块使用相同版本的库
对于Maven,我经常推荐JavaEENetBeansIDE,因为除其他外,它有一个很好的依赖关系可视化工具,这在检测和消除版本冲突方面很有用。(我不知道Eclipse或IntelliJ中有类似的工具)。如果在NetBeans中打开Maven项目,请单击pom.xml(在项目窗口中),然后选择Graph>ShowGraph
我用这个工具做两件事:
Maven完全可以很好地处理多模块项目。但是,它不能处理具有相同依赖项的不同(不兼容)版本的模块(因为需要多个类加载器才能使其工作)。相反,当存在多个版本时,Maven将采用最新版本的依赖项。双击pom.xml,单击底部的dependency hierarchy选项卡。“dependency hierarchy”显示类似于mvn dependency:tree的输出。它不像NetBeans中的依赖关系图那样直观。虽然Eclipse似乎也存在一个“依赖关系图”,但我只是没有安装它,也从未考虑过如何为Eclipse安装它。