maven 父maven
Maven标准化适用于所有项目构建,这意味着一旦开发人员熟悉了一个Maven项目,他们便可以全面了解Maven构建。 这通常被 Maven粉丝称为Maven的“绝佳”功能之一。 确实,Hirn在点此致意的同时开始了他最新的博客文章 ,然后继续讨论并驳回了选择不使用Maven的常见原因清单。
首先,Maven以Apache风格对所有项目进行建模,即使它们不是Web服务器。 Hirn承认所有Maven项目的确看起来像Apache项目,但是对他(一个经验丰富的Maven开发人员)来说,这只是一个公认的约定。 “当我查看appfuse项目时,对我来说,它们就像是Maven项目。”
其次,Maven只有四个构建阶段:编译,测试,安装,打包。 再次,这是Hirn承认的问题,但他提出了一种解决方案,该解决方案使用诸如Selenium的另一种工具来测试功能。 根据Maven网站的说法,尽管跟踪和安装附加组件是额外的工作,但有目的地使这些构建状态保持简单,因此在开始构建之前只需要学习少量命令即可。 这是弱点还是强项,都取决于您要从构建工具中获得什么。 这也是Maven标准目录结构深五个子目录约定的完美总结。 对于某些人来说,这可能是个麻烦,但是在希恩看来,这是“良好的惯例”。 他并不孤单,Buildr生成系统Gradle和Scala的simple-build-tool都使用这五个子目录约定。
对于Hirn而言,夸大说每次使用Maven进行构建时都应连接到互联网以更新依赖关系的说法。 建议您每天使用Internet一次快照,但是可以将其禁用。 因此,互联网只是一种推荐资源,从技术上讲,无需互联网就可以构建Maven项目-但是开发人员多久不使用互联网就尝试构建任何软件?
一些开发人员不喜欢Maven如何在自己的.m2存储库中管理项目依赖性,该存储库不是应用程序文件夹的一部分,并且可能使跟踪和打包开发环境成问题。 Hirn认为,这与其说是项目存储库,不如是您可能正在处理的多个Maven项目的本地存储库。 他建议使用Maven依赖插件来跟踪由哪些本地回购文件组成您的单个项目。 同样,这是额外的工作,但是是否值得进行额外的工作,则取决于您的Maven项目(并且可以说,您正在处理多少个Maven项目。)
最后,他解决了与Maven相关的最棘手的问题之一:它的约定是自动解决其自身的插件依赖性和项目依赖性。 或者,正如希恩所说,声称“行家总是下载整个互联网……即使您不想这么做。” 该约定是推动Kent R. Spillner的“ Java Build Tools:Ant Vs”的主要问题之一。 专家的咆哮。 但是,Hirn为遭受此问题的开发人员提出了一个解决方案: Maven 2.0.9 ,它引入了指定插件核心集的默认版本的功能。 下载Maven 2.0.9,并确保指定要下载的插件。 对于Hirn来说,就是这么简单。 但是,他确实没有提到在Maven 2.0.9中锁定在超级pom中的插件只是默认生命周期注入的插件以及其他一些常见的插件,例如程序集和依赖项。 其余的插件仍然可以接受非用户指定的随机更新。
Hirn通过指出Maven的自由和开放源代码状态以及创建此构建工具所付出的所有辛勤工作来表达自己的观点。 Maven并不是完美的,有一天它会被替换,但是它的替换将受益于Maven奠定的基础。 即使Maven有时会令人沮丧地未能达到目标,但将来会有一个构建工具没有。 而且,直到那时,如果您不喜欢Maven,那么Hirn都有一个简单的解决方案:尝试使用其他构建工具。
maven 父maven