从Maven 2/3迁移到Gradle

38

我一直在研究Gradle,它看起来非常有趣。我认为能够使用除XML以外的任何其他语言编写脚本是相当酷的功能,目前我不清楚多语言Maven POM文件是否仍然是可行的选择。

我正在开展一个项目,该项目使用Maven 2.2.1作为构建工具。这个项目:

  • 是多模块的
  • 使用(我们自己的)插件
  • 依赖于Artifactory代理存储库

是否有从Maven迁移到Gradle的经验?难点、痛点、角落案例?任何类型的经验都非常欢迎。

5个回答

34
从Maven迁移到Gradle并不像从Ant到Maven那么容易(至少目前是这样)。你可以轻松地重用Ant脚本,并将它们变成Gradle构建中的一等公民。此外,在Gradle路线图上有一个任务,用于深度导入Maven构建

到目前为止,我已经将两个企业级的Maven构建迁移到了Gradle。它们都是使用标准Maven插件的多模块项目。基本上,我按照Gradle的方式重写了构建,这需要至少对Gradle有一些了解。根据我的经验,你也可以轻松地在Gradle中运行相同的构建。Gradle在这里并没有限制你,并且非常灵活。在此过程中,您可能会发现自己必须编写一个自定义插件,这取决于您使用的Maven插件。但是,已经有广泛的插件可供选择。到目前为止,我还没有遇到真正的障碍。尽管Gradle文档非常好,但您可能会发现自己需要阅读很多Gradle论坛帖子才能找到解决某个问题的方法。一些标准的Maven功能不支持开箱即用,例如provided范围或WAR inplace。但是,有简单的解决方法。我没有使用Artifactory存储库。我处理的是Nexus存储库。据我所知,Gradle团队对Artifactory有很好的支持。 编辑:JFrog提供了一个Artifactory Gradle插件

一个好的开始是使用迁移工具Maven2Gradle,它可以从Maven构建中生成Gradle脚本。个人而言,我还没有使用过它。我将Gradle构建与Maven构建并行开发,这没有造成任何麻烦。Maven将其输出放在target下,Gradle则位于build下。确保你的团队为这种变化做好准备。让他们尝试使用Gradle构建并熟悉该工具。
一旦你完全迁移,你将会非常满意构建的可维护性和可扩展性。添加自定义构建逻辑非常容易,你会感激你离开了 XML 领域。就性能而言,你也不会退步。增量构建功能表现得非常出色。

2
Gradle的war插件现在(即在Gradle 1.0-milestone-6中)支持两个额外的配置:compileProvided和runtimeProvided。 - Olle Hallin
2
不幸的是,如果您的项目没有应用WAR插件,这对您没有帮助。您仍然需要定义自己的“provided”配置。这在Gradle社区中仍然存在争议,例如请参见此JIRA票 - Benjamin Muschko

11

您可能还想阅读这篇文章,介绍了我将Maven项目转换为Gradle的经验。


8
可以,请问需要进行翻译的原文是什么? - Frank Kusters

8
在存放pom.xml文件的目录下,运行以下命令: gradle init --type pom 这将把你的maven pom.xml转换为build.gradle。

1

maven2Gradle似乎已被替换为能够从命令行运行gradle init(尽管这是一个相当实验性的功能)。它似乎可以很好地从Maven项目中进行一些基本的Gradle设置。


1
如果想要构建输出路径为'target'而不是像Maven一样为'build',可以在Gradle中将buildDir更改为'target'。请注意,不要删除HTML标签。
buildDir = 'target'

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接