本文共 2218 字,大约阅读时间需要 7 分钟。
Maven,这个过去数十来年 Java 应用构建工具的事实标准,已经学会了处理非 XML 写成的构建文件。我们熟知的 ,可以通过使用插件来将它的 pom.xml 构建文件的表达方式替换为另一种语言。 这个示例源码包含了替换为、、 和 版本的构建文件。基于 YAML 的构建文件如下
\\\modelVersion: 4.0.0\groupId: io.takari.polyglot\artifactId: yaml-project\version: 0.0.1-SNAPSHOT\name: 'YAML Maven Love'\\properties: {sisuInjectVersion: 0.0.0.M2a, teslaVersion: 3.1.0}\\
每一种语言都能提供它们自己的解析和处理机制,在使用 Scala 或 Groovy插件的时候,还可以编写能在构建时运行的内联代码。因此,每个独立项目都可以在构建文件中编写自己的内联代码片段,而原本这些逻辑由于过于简单,并不适合作为插件来实现,但又无法简单地采用内嵌的 Ant 脚本来实现。另外,你还可以采用那些支持特定语言语法的编辑器来编辑这些文件。这样做既包含了 Maven 1 的灵活性(支持使用 来编写内联代码),又包含了 Maven 2 的扩展(这一版本以插件形式来支持内联代码)。更多的支持正在计划中,如无需 pom.xml 文件,就能直接从 Manifest.MF 构建 OSGi bundles的能力。
\\功能的代码已经存在了一段时间,但是一直以来,要使用该功能却并不简单,因为需要为 Maven 的标准安装添加补丁才能支持其它的 pom.xml 文件。而在 Maven 3.3 版本中,支持这些扩展功能的钩子函数允许你即使在没有特定 pom.xml 文件的情况下,便可将对扩展的变更添加到项目中。在 Maven 3.3 发布之后,如 Spring Hateoas 这些项目就。
\\一般来说,插件是被添加到 pom.xml 文件中的,但如果一开始没有 pom.xml 文件该怎么办呢?这便是 Maven 带来的一个关键更新 - 对的添加。通过将一个 文件夹添加到项目根目录下,你边能对开箱即用的 Maven 的运行机制进行调整。比如,你可以创建一个,允许将插件添加到构建时(采用核心扩展特性),然后依次通过插件来调用构建过程。如要让上面的 YAML 构建生效,你的 需要像下面这样:
\\\\u0026lt;?xml version=\"1.0\" encoding=\"UTF-8\"?\u0026gt;\\u0026lt;extensions\u0026gt;\ \u0026lt;extension\u0026gt;\ \u0026lt;groupId\u0026gt;io.takari.polyglot\u0026lt;/groupId\u0026gt;\ \u0026lt;artifactId\u0026gt;polyglot-yaml\u0026lt;/artifactId\u0026gt;\ \u0026lt;version\u0026gt;0.1.5\u0026lt;/version\u0026gt;\ \u0026lt;/extension\u0026gt;\\u0026lt;/extensions\u0026gt;\\
这段代码将触发,然后以便构建能够开始。可以采用任何工具来处理构建文件的内容;在对 JRuby 的处理中,会执行 Ruby 程序来计算依赖并设置需要的构建插件。
\\通过将构建过程委派给知道如何产生内容的工具,从而能导出编译内容的结果(以及生成的 pom.xml 文件),这个 pom.xml 文件可以简化为只用来代表项目的运行时依赖,从而兼容其它知道如何从这个被上传到仓库中的 pom.xml 中解析出依赖的工具。这样它在给予 Gradle 或 Ant 以灵活性的同时,还能支持将标准处理工具导出到插件扩展。
\\另外,还能用核心扩展来为 Maven 命令行添加默认选项。比如,如果 Maven 项目需要比默认配置更大的堆,你无须在每个调用过程中指定 -Xmx(或让用户设置MAVENOPTS 或 JAVAOPTIONS 变量),你可以在项目根目录添加 .mvn/jvm.config 文件,指定 JVM 需要的参数。
\\\-Xmx2048m -Xverify:none -Djava.awt.headless=true\\
另外你还可以为 Maven 命令行选项设置参数,比如添加下面的代码到.mvn/maven.config,你便可以非常简洁地来调用多线程构建:
\\\--threads 2C --quiet\\
当你每次从命令行运行 Maven 的时候,这些参数将被添加到所有参数的前面,这样你能让开发者们(以及服务器)的每次构建过程都保持一致。
\\Polyglot 和核心扩展特性需要 Maven 3.3.1 或以上版本,现已可以从 网站上。
\\查看英文原文:
\\感谢对本文的审校。
\\给InfoQ中文站投稿或者参与内容翻译工作,请邮件至。也欢迎大家通过新浪微博(,),微信(InfoQ)关注我们,并与我们的编辑和其他读者朋友交流。
转载地址:http://shicl.baihongyu.com/