解决Java项目之间依赖关系的最佳方法是什么?

解决Java项目之间依赖关系的最佳方法是什么?,java,dependencies,buildpath,Java,Dependencies,Buildpath,我想你们大多数人都会知道,程序员经常重用来自其他软件的代码。我认为,大多数时候这是个好主意。但是如果您使用另一个项目的代码,那么您的程序将依赖于另一个项目 我目前的案例是,我有三个java项目A、B和C。现在A使用B,B使用C。我使用eclipse IDE,将B添加到A的构建路径中,将C添加到B的构建路径中。现在出现了一个编译器错误,A无法从C解析某些内容。因此,我必须将C添加到B的构建路径中 那么,解决依赖关系的最佳方法是什么,同时使您的程序尽可能独立于其他项目 我想知道的是一般情况和我目前的

我想你们大多数人都会知道,程序员经常重用来自其他软件的代码。我认为,大多数时候这是个好主意。但是如果您使用另一个项目的代码,那么您的程序将依赖于另一个项目

我目前的案例是,我有三个java项目A、B和C。现在A使用B,B使用C。我使用eclipse IDE,将B添加到A的构建路径中,将C添加到B的构建路径中。现在出现了一个编译器错误,A无法从C解析某些内容。因此,我必须将C添加到B的构建路径中

那么,解决依赖关系的最佳方法是什么,同时使您的程序尽可能独立于其他项目

我想知道的是一般情况和我目前的情况。有更好的方法吗?例如,在启动/调试配置视图中有类路径设置,但我认为它们在编译时不会有帮助


提前谢谢。

这听起来像是Maven解决的问题集的一部分。使用Maven和Eclipse,即m2eclipse,您可以让项目使用其他项目,所有依赖项解析都会为您处理。

在我看来,您正在做您必须做的事情,而没有集成像Ivy或Maven这样的依赖项管理工具,它们为您提供了“可传递依赖项管理”的功能。使用这两种工具中的任何一种,您都可以指定A依赖于B,B依赖于C,并且它们会自动知道A也需要C


Maven的优点(这是我的经验)在打包项目进行部署时也会发挥作用,因为它可以轻松地收集所有这些依赖项(一直到层次结构),并将它们放在包含所有依赖项的分发文件夹或胖罐子中。进入Maven这样的工具需要一些阅读和设置时间,但它确实使管理依赖关系的任务变得更加容易,尤其是当它们增长时。

依赖关系管理是一个巨大的主题。Maven、Ivy和其他工具已经开发出来,以缓解疼痛,并取得了一些成功。这两种工具都创建了依赖关系层次结构,因此您不会遇到您描述的情况。他们还拥有Eclipse插件,以便Eclipse能够识别该层次结构


要真正使用这些框架,您必须更改当前的构建过程。Maven可能比Ivy需要更多的承诺,但两者都不是微不足道的,理解如何设置它需要一些时间。也就是说,清晰地定义和管理依赖关系非常有帮助。

我们使用Maven,它对我们的项目至关重要。这是一个学习的好时机——依赖3个以上的项目可能会令人恐惧。Maven处理版本,因此无论出于何种原因,如果您必须依赖Foo.1.2.3,Maven将确保您不会得到错误的版本

然而,这不是小事。如果您使用Netbeans,它比Eclipse内置的更好,可能会帮助您学习。(此外,两个系统之间的项目也可以进行切换)

Maven在其POM(POM.xml)文件中支持很多概念,包括许可证信息、贡献者、参数等,因此您得到的不仅仅是依赖关系管理。它支持项目模块化


不要跳过学习曲线——你需要知道它是如何工作的。但是你也会发现前面的问题会有所帮助,其他人提到了一些好的工具,maven可能是最常见的。常春藤是另一个更侧重于依赖管理的学校。我个人使用gradle,它在一个熟悉的groovy包装器下具有所有这些特性中最好的一些。。。这一点仍在不断发展,而且记录不清

需要注意的一件事是这些工具如何处理可传递依赖关系。在您的示例中,C是a的可传递依赖项,因为a依赖于B,而B依赖于C。这些构建工具中的一些将以不同的方式处理此类依赖项,当您最不希望的时候,它会让您感到惊讶

例如,如果A实际上引用了C中的代码,即:它对C有编译时依赖关系,那么A->B->C设置将在类似Maven的环境中工作。另一方面,gradle也会让你声明A依赖于C。。。既然如此。无论哪种方式,运行时依赖项都会得到完全解决

令人惊讶的是,当您几个月来一直以传递方式包含某些内容,并且您的一些代码依赖于C的某些方面,并且您决定不再需要B依赖时。突然之间,直到您确定需要指定一个a->C依赖项,您的代码才会生成。在本例中,这是很容易发现的,但有时并非如此


如果这样的谈话让你的头脑有点浮躁,而你也不打算让你的项目变得更加复杂。。。然后你可能会坚持你正在做的事情一段时间。正如其他人提到的,在没有工具帮助的情况下,这是正确的方法。

使用maven管理依赖项,然后使用依赖项插件查看依赖项

你可以跑

mvn依赖关系:分析

mvn依赖项:tree-Dverbose=true


这将对你有很大帮助。

毫无疑问,你应该像人们所说的那样使用依赖关系管理工具。。。不过,手动将B和C归档到B_C.jar中。测试B对C的依赖性是否在Jar中得到解决

然后在类路径中添加B_C.jar…

免费maven书籍:


此外,如果您使用IntelliJ IDEA,内置的Maven集成非常棒。我们在大型项目中使用Maven。我喜欢它,一旦它的设置和工作正常,但文件是薄弱的,在许多地方,它可以有一个陡峭的学习曲线。如果你想了解更多关于Maven的信息,这里有一本来自sonatype的免费电子书:不知道为什么这本书被否决了,没有任何评论。这是有效的