将 Gradle 模块包含到 Maven 项目中
Posted
技术标签:
【中文标题】将 Gradle 模块包含到 Maven 项目中【英文标题】:Include Gradle module to Maven project 【发布时间】:2017-03-14 04:07:38 【问题描述】:我们有一个使用 Maven 作为构建系统的大型项目。我们决定在未来的项目中使用 Gradle 作为更方便的工具,但我们也希望将 Gradle 用于我们的遗留项目。
我认为一次从 Maven 迁移到 Gradle 会非常痛苦,因为我们在 POM 文件中有大量代码(我们的构建逻辑非常繁重)。
我知道,Gradle 有自动迁移工具 (gradle init),但它不能正常工作(我认为这个工具适用于没有特定构建逻辑的小型 Maven 项目)。
那么,这里有一个问题:我可以 以小步骤进行迁移吗?也许有 Maven 插件,允许将build.gradle
视为pom.xml
文件?
【问题讨论】:
【参考方案1】:gradle-maven-plugin 允许您在 Maven 中运行 Gradle 任务。来自插件描述:
要使用插件,只需声明插件并将其绑定到 maven 您选择的生命周期阶段:
<plugin> <groupId>org.fortasoft</groupId> <artifactId>gradle-maven-plugin</artifactId> <version>1.0.8</version> <configuration> <tasks> <!-- this would effectively call "gradle doSomething" --> <task>doSomething</task> </tasks> </configuration> <executions> <execution> <!-- You can bind this to any phase you like --> <phase>compile</phase> <goals> <!-- goal must be "invoke" --> <goal>invoke</goal> </goals> </execution> </executions> </plugin>
现在,当您运行 maven 时,将调用 gradle 并执行 build.gradle 中定义的“doSomething”任务。
显然,您可以更改任务以满足您的需要。
在此示例中,gradle 调用将在 maven 期间发生 “编译”阶段,但这可以通过更改 元素值。
不确定,如何将 Gradle 构建的工件包含到您的依赖项中,您可能需要将此工件发布到本地 maven 存储库,以使其可用于您的 maven 项目。
【讨论】:
请注意:本项目自2016年起未更新,使用的是Gradle 2.13。 @crimaniak 使用维护的分支:github.com/raphw/gradle-maven-plugin @Jay Taylor 感谢您的链接。很遗憾,我发现这种方法对我不起作用。我有一个包含数千个模块的大型项目,一个配置的 Maven 构建时间约为 15 分钟。使用了很多自定义的东西,配置文件,变量等,因此很难将其转换为 Gradle。想法是按模块转换它,并使用这个插件通过 Gradle 构建转换后的模块。但我发现 maven 在运行 Gradle 之前仍然试图找到生命、宇宙和万物的终极问题的答案,所以这种方法对我没有好处。【参考方案2】:您可能会发现我的gradle-maven-share 插件很有用。它旨在通过与 gradle 共享 maven 配置来帮助从 maven 迁移到 gradle。
【讨论】:
【参考方案3】:我可能会使用:
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>exec-maven-plugin</artifactId>
<executions>
<execution>
<id>test</id>
<phase>test</phase>
<configuration>
<executable>./gradlew</executable>
<arguments>
<argument>test</argument>
<argument>-i</argument>
</arguments>
</configuration>
<goals>
<goal>exec</goal>
</goals>
</execution>
<execution>
<id>install</id>
<phase>install</phase>
<configuration>
<executable>./gradlew</executable>
<arguments>
<argument>install</argument>
</arguments>
</configuration>
<goals>
<goal>exec</goal>
</goals>
</execution>
</executions>
</plugin>
查看原因:https://***.com/a/62971663/8650621
【讨论】:
以上是关于将 Gradle 模块包含到 Maven 项目中的主要内容,如果未能解决你的问题,请参考以下文章
是否可以将 AngularJs 包含到带有 Gradle 的项目中
Gradle 5 Kotlin DSL:多模块项目中的常见任务和 Maven 工件
Android Gradle 插件将自定义 Gradle 插件上传到自建 Maven 仓库 ⑧ ( 设置 Gradle 插件模块 | 将 Gradle 插件上传到自建 Maven 仓库 )
Android Gradle 插件自定义 Gradle 插件模块 ③ ( Gradle 插件模块发布配置 | Windows 本地 Maven 仓库地址 | 将插件上传到本地 Maven 仓库 )