Ant*_*jev 97
Maven是Java最流行的构建和依赖解析工具,就像NPM用于JS一样.但它不仅仅是针对不同语言的相同工具.Java和JS构建之间显然存在巨大差异,这些差异在Maven运行的方式中直接可见.例如,虽然许多JS工具依赖Git来做一些繁重的工作,但是Maven使用基于自定义文件系统的Maven存储库,因为Maven早于Git并且需要处理二进制工件,Git历史上处理得不好.在Maven中,源和二进制文件之间存在明显的分离,而它们在JS世界中通常是相同的.
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和其他构建工具,例如实际处理多个JS构建工具的frontend-maven-plugin.
Mar*_* An 18
下面我用|Maven来分隔 npm条款:
两种工具都支持基于描述符文件|的动态获取依赖项(工件|包)pom.xml。package.json,还允许您部署| 发布自己的工件| 包。
它们都有默认的公共存储库。注册表 (http://repo.maven.apache.org/maven2/ | https://registry.npmjs.org),但也可以使用第三方(通过settings.xml|.npmrc)。
它们都支持构建级别依赖关系的概念(脚本中使用的插件| devDependencies)。* Maven provided也支持依赖关系,但这似乎不适用于npm,因为javascript很少部署到容器中。
它们都支持依赖命名空间:groupId|scope
Maven还有一个本地存储库(缓存):
在Maven中构建的项目的依赖项在中下载<homedir>/.m2。使用npm可以将它们下载到中<projectdir>/node_modules。
在Maven中进行构建通常是一个步骤:(mvn package获取deps,进行构建)。在npm中,这是一个两步过程:npm install(fetch deps),npm build(build)
行家定义构建生命周期(用于构建,测试,部署)由阶段,到默认操作(插件的目标)连接,基于differrent封装选项(.jar,.war,.ear等)。然后,您可以覆盖这些操作,或注入新操作(通过插件系统)。这为构建,docgen,测试,部署等提供了一种开箱即用的解决方案。npm
方法更为简单(请参阅: 脚本)
由于上述原因,npm被标记为javascript的软件包管理工具,而maven被标记为java的构建自动化和依赖项管理工具。
在maven设置中,构建过程通常涉及编辑pom.xml。
在npm中,它涉及编写代码或配置补充构建工具(例如gulp)webpack等
由于某些原因,用户在npm模块中定义的版本范围比maven 宽松得多。这可能会导致传递依赖项出现问题,这就是最近添加一个附加文件的原因:package-lock.json
使用npm ,开始一个新项目要简单得多npm init。使用Maven,您需要知道如何编写minimal pom.xml或阅读有关原型的信息。
一般而言,编辑pom.xml比package.json。例如在行家添加依赖完成手动(或经由IDE),而在NPM通过命令行。
与所有构建工具一样,您可以从另一个内部调用一个工具,但是我认为从maven内部调用npm比在另一个内部调用更为普遍。
npm支持开发,生产构建。在Maven中,这需要通过配置文件进行定义。
是的。它是一个类似的java打包工具。寻找gradle还可以让您更自由地使用groovy language,但首先您可以使用它maven来组织您的依赖项。您将它们作为标签包含在那里,maven 会为您完成这项工作。
它遍历依赖树并下载所有适当的 jar。
| 归档时间: |
|
| 查看次数: |
27861 次 |
| 最近记录: |