将 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 仓库 )

将Java项目从maven迁移到gradle

将Java项目从maven迁移到gradle