我无法理解Maven是什么。我有很多关于它的红色,但仍然没有得到它

时间:2015-10-15 02:44:09

标签: java maven

它说Maven是一个构建工具。它像IDE吗?什么是“建筑”?你是什​​么意思?

假设您要编写Java代码。你打开Eclipse,编写你的类,然后将它导出到JAR文件,每个人都使用它。这叫做建筑吗?如果是,那你为什么需要Maven?

它还说它管理你的依赖项。好吧如果我正在写一个需要依赖的类,我应该已经知道它们是什么了,不应该导入它们吗?

请帮助我了解什么是Maven广告,Eclipse不能做什么?请不要一直说'这是一个构建工具'

3 个答案:

答案 0 :(得分:1)

根据What maven is?中的this complete reference部分。

  

Apache Maven的更正式定义:Maven是一个项目管理工具,它包含项目对象模型,一组标准,项目生命周期,依赖关系管理系统以及在生命周期中定义阶段执行插件目标的逻辑。当您使用Maven时,您使用定义良好的项目对象模型描述您的项目,然后Maven可以从一组共享(或自定义)插件中应用横切逻辑。

现在这篇文章说项目管理工具 ..这是什么?好吧,如果你读第一段。

  

构建工程师和项目经理可能会将Maven称为更全面的东西:项目管理工具。有什么不同?像Ant这样的构建工具仅专注于预处理,编译,打包,测试和分发。诸如Maven之类的项目管理工具提供了构建工具中的功能的超集。除了提供构建功能外,Maven还可以运行报告,生成网站,并促进工作团队成员之间的沟通。

因此,作为一个项目管理工具,这些是maven可以为您做的事情

  1. 创建项目结构:大多数情况下,您可能不知道正确的项目结构应该是什么。只需选择一个正确的maven原型就可以了。

  2. 解决依赖关系:在这里,我将尝试回答你的好吧如果我正在编写一个需要依赖的类,我应该已经知道它们是什么并导入它们了不是吗?不......不是真的!
    你有没有使用过一个框架并将所有必需的jar AKA依赖项添加到你的calsspath中,这样你就不会在运行时获得编译错误java.lang.NoClassDefFoundError?一个常见的例子是,当您使用spring时,您还需要commons-logging.jar,但在下载弹簧分发时它没有捆绑在一起。大多数时候,一个依赖依赖于另一个依赖而另一个依赖于另一个。除了maven之外,开发人员不可能知道它们。因此,如果你使用maven,你永远不会搜索谷歌java.lang.noclassdeffounderror org/slf4j/loggerfactory jar和下载并将其添加到类路径。


  3. 正如评论中所指出的,需要使用maven存储库来解决依赖关系。如果你不添加一个,默认情况下你有maven repository,maven会在那里下载依赖项。除了中央存储库之外,您还在主目录中有一个本地存储库.m2文件夹。因此,如果依赖项一旦下载并在本地可用,则不会再次下载它们。
    如果您需要组织专用的依赖项,则需要添加存储库URL,当然还可以访问它。

    1. 测试:如果您遵循某些标准并编写单元测试,maven将自动执行所有单元测试并显示结果。除非默认情况下所有测试都成功,否则它不会让您打包项目。

    2. 套餐:Maven会将您的项目导出到jar / warear,具体取决于您的项目原型。

    3. 部署:Maven也可以为您进行部署。请参阅here

    4. 您只需使用命令行就可以完成所有这些操作。

      但几乎每次有IDE时,IDE都会支持其中一些任务。好吧,使用maven只是为了依赖管理。我个人觉得它是最好的功能,只是因为我再次无法解决NoClassDefFoundError的痛苦,然后搜索google for jars几个小时。

答案 1 :(得分:1)

  

它是否像IDE一样?

不,不是。 (你可能会听到烦恼,但是建立工具,为什么?检查下面的内容)

  

那么'建筑'是什么?

  • 构建将所有工件(类,资源,xmls,jsons等)组合在一起并将它们相互引入。这样他们就可以共同努力实现目标。
  • Maven也有一个结构,比如测试类特别是文件夹,特定文件夹中的测试资源,特定文件夹中的java源类等,你可以查看它。
    这有一个优点,当我们像jenkins一样部署我们的项目时,它知道在哪里可以找到测试类,在哪里可以找到测试资源,在哪里可以找到配置文件以及更多位置。

当我们谈论庞大的项目时,有很多东西需要配置,如果没有内置工具,这很不好。

  

好吧如果我正在写一个需要依赖的类,我应该已经知道它们是什么了,不应该导入它们吗?

假设你有100个罐子的依赖,你需要在几天后更新它们, 您将继续在线下载每个jar并手动将其添加到您的代码中。

此外,您将与这100个罐子一起传播您的项目,其他成员将参与您的项目。

这很麻烦......

使用Maven,只需编辑您想要的版本的POM,它将从中央存储库下载。否则将其添加到您当地的仓库。

  

打开Eclipse,编写类,然后将其导出到JAR文件,每个人都使用它。这叫做建筑吗?

是的。

  

如果是,那你为什么需要Maven?

同样的理论,你正在开发包含5个自定义罐子的大项目,而你在印度,日本,美国的团队成员都在合作。根据上述理论,您可以想象您将面临哪些问题。

我希望你能得到真正的maven的主旨。

答案 2 :(得分:0)

如果您来自javascript背景,Mavennpm类似。当您使用npm时,npm读取package.json以下载依赖项,在Maven中,它读取pom.xml