如何在Java中要求依赖关系?

如何在Java中要求依赖关系?,java,maven,gradle,dependency-management,Java,Maven,Gradle,Dependency Management,我习惯于使用composer、npm和bower等工具,在这些工具中,我需要来自集中存储库的依赖项。(ruby有bundler,python有pip。) 不过,目前我正在处理jar文件,设置它们的过程似乎有些不协调。我必须下载它们,在项目中设置它们(我使用IntelliJ IDEA,但它类似于eclipse或netbeans) 我正在寻找一种方式,只说“需要库x在版本y”,并有命令来安装和更新它们 似乎maven或gradle做了一些工作,但我有点困惑,因为他们被描述为构建工具 我不想构建我的应

我习惯于使用composer、npm和bower等工具,在这些工具中,我需要来自集中存储库的依赖项。(ruby有bundler,python有pip。)

不过,目前我正在处理jar文件,设置它们的过程似乎有些不协调。我必须下载它们,在项目中设置它们(我使用IntelliJ IDEA,但它类似于eclipse或netbeans)

我正在寻找一种方式,只说“需要库x在版本y”,并有命令来安装和更新它们

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

我不想构建我的应用程序,我只是简化了依赖关系管理,这样就不会依赖于一些未加载的jar文件

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


什么更适合管理依赖关系?我将如何管理依赖关系?

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

ApacheMaven是一个软件项目管理和理解工具。 基于项目对象模型(POM)的概念,Maven可以管理 一个项目的构建、报告和文档是由一个 信息


马文就是这么做的。它是一个完整的构建工具,依赖关系管理是其中的一部分。maven使用一个中央存储库,您可以拥有自己的存储库,也可以使用任何回购协议

我不想构建我的应用程序,我只是简化了依赖关系管理,这样就不会依赖于一些未加载的jar文件

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

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

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

什么更适合管理依赖关系?我将如何做到这一点


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

让我们从一个简单的问题开始:是的,有一个中央存储库,在那里(几乎)可以找到所有东西: 除此之外,有些公司还拥有自己的存储库。比如说

如果你想自己托管一些开源软件,还有一个问题

respository是一个简单的文件结构,其中包含jar文件和一些xml元数据。布局来自maven世界,但几乎所有java构建系统都有从maven central检索工件的方法

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

依赖项在pom.xml(如果使用maven)build.gradle文件(如果使用gradle)中配置。还有sbt或常春藤+蚂蚁

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

Maven来自convention over configuration部分。看。Intellij集成非常好

Gradle使用Groovy(一种基于java vm的脚本语言)来实现类似的目标,但对发生的事情更加开放。但这使得在和IDE中的集成更加困难——这取决于您对构建的创造性。这是一个很好的起点

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

不要忘记:sbt(主要来自Scala世界)或leiningen(主要是clojure)——所有基于JVM的语言

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


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

这个问题要么太宽,要么是寻找外部指针(文档、教程)或基于意见(您甚至可以只使用Ivy而不是maven),在这三种情况中的任何一种情况下,都符合与javascript相反的Closure条件,您需要编译和构建Java应用程序,这是将构建和依赖关系管理放在同一个工具中的一个很好的理由。而且与大多数IDE的集成是好的(或者足够好),所以它甚至不会成为阻碍。