如何在Java中要求依赖?

时间:2016-03-01 16:09:43

标签: java maven gradle dependency-management

我习惯于像composer和npm以及bower这样的工具,我需要来自集中存储库的依赖项。 (对于红宝石,有捆绑器,而python有点。)

目前,我正在使用jar文件,设置它们的过程似乎很刺耳。我必须下载它们,在项目中设置它们(我使用IntelliJ IDEA,但它类似于eclipse或netbeans)。

我正在寻找一种方法来说明"在版本y"上需要库x,并且有命令来安装和更新它们。

似乎maven或gradle做了一些工作,但我有点困惑,因为它们被描述为构建工具。

我不想构建我的应用程序,我只是简化了依赖关系管理,所以不要依赖一些已经下载的jar文件。

是否存在这样的集中存储库?什么是事实上的标准? (大多数人使用,即作曲家已经使梨过时了)我将如何设置它?

什么更适合管理依赖项,我该怎么做?

4 个答案:

答案 0 :(得分:2)

让我们从简单的问题开始:是的,有一个中央存储库,几乎可以找到所有内容:http://search.maven.org/ 除此之外,一些公司还拥有自己的存储库。例如JBoss

如果您想自己托管一些开源软件,还有Sonatype repository

存储库是一个简单的文件结构,包含jar文件和一些xml元数据。布局来自maven世界,但几乎任何java构建系统都有一些方法可以从maven中心检索工件。

整个依赖项解析与你从npm知道的有点不同。您依赖的每个包都有自己的依赖项。其中一些可能会发生冲突。在java世界中,需要匹配这些传递依赖 - 需要识别通用版本。这通常由构建系统完成。因此,您的“require”是一个依赖项,这意味着jar将最终出现在类路径中,因此这些类将可用于您的代码。开箱即用的过程中没有动态(在启动jvm后将jar添加到类路径中)。

依赖关系是在pom.xml中配置的(如果你使用maven)build.gradle文件(你应该去gradle)。还有sbt或Ivy + Ant。

通常,您的工件解析系统也会运行构建。这是有道理的,因为您需要定义类路径来编译Java源代码。如果你只是使用这些工具来复制那些jar文件,你仍然需要找到一种方法将所有这些工具传递给编译器。在第3次依赖之后,这很无聊。

Maven来自于配置部分的约定。请参阅5 Minute tutorial。 Intellij集成非常好。

Gradle使用Groovy(一种基于java vm的脚本语言)来实现类似的目标,但对发生的事情更加开放。但是这使得集成和IDE更加困难 - 取决于您对构建的创新程度。 gradle user guide是一个非常好的起点。

还有Ant + Ivy。 Ant是一个简单的构建系统,可以在其中定义任务。 Ivy为它添加了依赖性解析。

永远不要提到这个:sbt(主要来自Scala世界)或leiningen(主要是clojure) - 所有基于JVM的语言。

我的推荐是maven - 它需要一个简单的pom.xml,您可以在其中添加依赖项 - 如果遵循其目录结构约定,编译将运行开箱即用 - 这在java世界中很常见。而且大多数IDE都可以运行。如果您的构建需要更复杂的构建步骤,则gradle具有良好的迁移路径。

上面的5分钟教程使用原型(maven中的项目模板)来帮助您入门。如果你已经这样做了,你应该能够在IntelliJ中打开该文件夹并继续从那里开始。

答案 1 :(得分:0)

是的,有这样一个集中的存储库(Maven Central)。使用Maven

  

Apache Maven是一个软件项目管理和理解工具。   基于项目对象模型(POM)的概念,Maven可以管理   项目的构建,报告和文档来自中心部分   信息。

答案 2 :(得分:0)

Maven正是如此。它是一个完整的构建工具,依赖管理是其中的一部分。 maven使用中央存储库,您可以拥有自己的存储库或使用任何存储库。

答案 3 :(得分:0)

  

我不想构建我的应用程序,我只是简化了依赖关系管理,所以不要依赖一些已经下载的jar文件。

最终,您仍然希望构建应用程序,那么为什么不使用支持依赖关系管理的构建系统呢?还有纯粹的依赖管理器(例如Apache Ivy),但为什么不使用完全成熟的构建工具来简化集成呢?

  

是否存在这样的集中存储库?什么是事实上的标准? (大多数人使用,即作曲家已经使梨过时了)我将如何设置它?

有几个集中式存储库,其中最常见的存储库是Maven Central

  

什么更适合管理依赖项,我该怎么做?

您可以使用任何符合您需求的构建工具并支持此功能。其中3个是Maven,Apache Ivy和Gradle。只需选择一个并阅读其文档。