首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Maven类似于npm吗?

Maven类似于npm吗?
EN

Stack Overflow用户
提问于 2016-07-15 13:59:14
回答 3查看 48.8K关注 0票数 103

因为我已经与npm一起工作,它在package.json文件中查找依赖项并为您下载它。类似地,我在Java项目中看到了一个pom.xml文件。maven是否会查看此文件并为我下载依赖项。我可以像package.json一样传递这个pom.xml文件,而不是给依赖jars吗?这些工具是相似的,只是为不同的平台构建的吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-07-15 17:34:29

同样的工具,不同的语言?

Maven是Java最流行的构建和依赖项解析工具,就像NPM用于JS一样。但它不只是一种不同语言的相同工具。显然,Java和JS构建之间存在巨大的差异,这些差异在Maven的操作方式中是直接可见的。例如,虽然许多JS工具依赖于Git来做一些繁重的工作,但Maven使用基于自定义文件系统的Maven存储库,因为Maven早于Git并需要处理二进制工件,而Git过去并没有很好地处理这些工件。在Maven中,源代码和二进制文件之间有明确的分离,而在JS世界中,它们通常是同一件事。

Maven基础知识

Maven以其最纯粹的形式遵循声明性模型,其中pom.xml (类似于package.json)定义了构建的不同属性,但不包含脚本。缺点是在不使用脚本的情况下对构建的某些方面进行微调可能是一个挑战,因为您必须依赖插件。优点是,只需查看pom.xml就可以更容易地理解其他构建,因为它们通常遵循相同的方法,而不需要太多的定制。Gradle是一个流行的基于Groovy的工具,它构建在Maven标准和约定之上,专门设计用来简化pom.xml并打破“无脚本”的障碍。

引用你的依赖

package.json类似,您不直接使用依赖项的pom.xml,而是定义依赖项坐标并让您的构建工具处理其余的工作。在Maven中,这些坐标的基本形式是GAV (groupId,artifactId,version)。

平面依赖关系树?

根据另一个答案中的注释,Maven提供了“平面依赖树”,而不是NPM默认提供的“嵌套依赖树”。Maven不允许同一依赖项的多个版本。如果请求了不同的版本,Maven会使用dependency resolution来选择单个版本。这意味着,有时您的可传递依赖项将获得不同于它们所需的版本,但有一些方法可以管理这一点。然而,这种限制来自Java,而不是Maven,因为(通常)在Java中,即使在类路径上发现多个定义,类加载器也只提供对单个类定义的访问。由于Java不是特别擅长处理这种情况,因此Maven从一开始就试图避免这种情况。

注意:由于npm v3,依赖是扁平化的。替代包管理器yarn也做同样的事情。

成熟度

此外,Maven比NPM老得多,拥有更大的用户基础,大量的自定义插件,到目前为止可能被认为是更成熟的整体。有时,Maven用于非Java甚至多语言项目,因为有一些插件可用于处理其他语言或特定环境,如Android。有一些插件可以连接Maven和其他构建工具,比如实际处理多个JS构建工具的frontend-maven-plugin

票数 153
EN

Stack Overflow用户

发布于 2016-07-15 14:12:42

是。这是一个类似于java的打包工具。也可以看看gradle,它可以让你在使用groovy language时拥有更多的自由,但是首先你可以使用maven来组织你的依赖。您可以将它们作为标记包含在其中,maven将为您完成这项工作。

它遍历依赖关系树并下载所有合适的jars。

票数 4
EN

Stack Overflow用户

发布于 2018-04-07 23:24:15

是的,gradle也是如此,但它们不像npm那样用户友好。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38388824

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档