它说Maven是一个构建工具。它像IDE吗?什么是“建筑”?你是什么意思?
假设您要编写Java代码。你打开Eclipse,编写你的类,然后将它导出到JAR文件,每个人都使用它。这叫做建筑吗?如果是,那你为什么需要Maven?
它还说它管理你的依赖项。好吧如果我正在写一个需要依赖的类,我应该已经知道它们是什么了,不应该导入它们吗?
请帮助我了解什么是Maven广告,Eclipse不能做什么?请不要一直说'这是一个构建工具'
答案 0 :(得分:1)
根据What maven is?中的this complete reference部分。
Apache Maven的更正式定义:Maven是一个项目管理工具,它包含项目对象模型,一组标准,项目生命周期,依赖关系管理系统以及在生命周期中定义阶段执行插件目标的逻辑。当您使用Maven时,您使用定义良好的项目对象模型描述您的项目,然后Maven可以从一组共享(或自定义)插件中应用横切逻辑。
现在这篇文章说项目管理工具 ..这是什么?好吧,如果你读第一段。
构建工程师和项目经理可能会将Maven称为更全面的东西:项目管理工具。有什么不同?像Ant这样的构建工具仅专注于预处理,编译,打包,测试和分发。诸如Maven之类的项目管理工具提供了构建工具中的功能的超集。除了提供构建功能外,Maven还可以运行报告,生成网站,并促进工作团队成员之间的沟通。
因此,作为一个项目管理工具,这些是maven可以为您做的事情
创建项目结构:大多数情况下,您可能不知道正确的项目结构应该是什么。只需选择一个正确的maven原型就可以了。
解决依赖关系:在这里,我将尝试回答你的好吧如果我正在编写一个需要依赖的类,我应该已经知道它们是什么并导入它们了不是吗?不......不是真的!
你有没有使用过一个框架并将所有必需的jar AKA依赖项添加到你的calsspath中,这样你就不会在运行时获得编译错误java.lang.NoClassDefFoundError
?一个常见的例子是,当您使用spring
时,您还需要commons-logging.jar
,但在下载弹簧分发时它没有捆绑在一起。大多数时候,一个依赖依赖于另一个依赖而另一个依赖于另一个。除了maven之外,开发人员不可能知道它们。因此,如果你使用maven,你永远不会搜索谷歌java.lang.noclassdeffounderror org/slf4j/loggerfactory jar
和下载并将其添加到类路径。
正如评论中所指出的,需要使用maven存储库来解决依赖关系。如果你不添加一个,默认情况下你有maven repository,maven会在那里下载依赖项。除了中央存储库之外,您还在主目录中有一个本地存储库.m2
文件夹。因此,如果依赖项一旦下载并在本地可用,则不会再次下载它们。
如果您需要组织专用的依赖项,则需要添加存储库URL,当然还可以访问它。
测试:如果您遵循某些标准并编写单元测试,maven将自动执行所有单元测试并显示结果。除非默认情况下所有测试都成功,否则它不会让您打包项目。
套餐:Maven会将您的项目导出到jar
/ war
或ear
,具体取决于您的项目原型。
部署:Maven也可以为您进行部署。请参阅here。
您只需使用命令行就可以完成所有这些操作。
但几乎每次有IDE时,IDE都会支持其中一些任务。好吧,使用maven只是为了依赖管理。我个人觉得它是最好的功能,只是因为我再次无法解决NoClassDefFoundError
的痛苦,然后搜索google for jars几个小时。
答案 1 :(得分:1)
它是否像IDE一样?
不,不是。 (你可能会听到烦恼,但是建立工具,为什么?检查下面的内容)
那么'建筑'是什么?
当我们谈论庞大的项目时,有很多东西需要配置,如果没有内置工具,这很不好。
好吧如果我正在写一个需要依赖的类,我应该已经知道它们是什么了,不应该导入它们吗?
假设你有100个罐子的依赖,你需要在几天后更新它们, 您将继续在线下载每个jar并手动将其添加到您的代码中。
此外,您将与这100个罐子一起传播您的项目,其他成员将参与您的项目。
这很麻烦......
使用Maven,只需编辑您想要的版本的POM,它将从中央存储库下载。否则将其添加到您当地的仓库。
打开Eclipse,编写类,然后将其导出到JAR文件,每个人都使用它。这叫做建筑吗?
是的。
如果是,那你为什么需要Maven?
同样的理论,你正在开发包含5个自定义罐子的大项目,而你在印度,日本,美国的团队成员都在合作。根据上述理论,您可以想象您将面临哪些问题。
我希望你能得到真正的maven的主旨。
答案 2 :(得分:0)
如果您来自javascript背景,Maven
与npm
类似。当您使用npm时,npm读取package.json
以下载依赖项,在Maven中,它读取pom.xml
。