maven和npm repository之间有什么区别



我想知道npm和maven repository 之间的区别

相同的工具,不同的语言?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会使用依赖解析来选择一个版本。这意味着有时您的可传递依赖关系会得到不同于它们所需的版本,但有一些方法可以管理这一点。然而,这种限制来自Java,而不是Maven,因为(通常(在Java中,即使在类路径上找到多个定义,类加载器也只能提供对单个类定义的访问。由于Java不是特别擅长处理这种情况,Maven首先试图避免这种情况。

注意:由于npm v3,依赖关系是扁平的。可供选择的包装管理器纱线也有同样的作用。

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

NPM专注于JavaScript,而Maven专注于Java和JVM派生(即Scala、Kotlin、Groovy(
所以比较它们根本没有意义,因为它们不是同时发生的
将Maven与Gradle(Java世界并发(或将NPM与Yarn(JavaScript世界并发(进行比较更有意义。

现在Maven和NPM已经有了封闭的特性。这并不奇怪:好的食谱超越了一种语言。

以下是一些共同点/特性:
-这些是与本地/远程存储库一起工作的包(JavaScript术语(/依赖性(Maven术语(管理器
-这些也是管理项目中的依赖项并为它们执行构建任务的一种方法。

最新更新