【问题标题】:Include Gradle module to Maven project将 Gradle 模块包含到 Maven 项目中
【发布时间】:2017-03-14 04:07:38
【问题描述】:

我们有一个使用 Maven 作为构建系统的大型项目。我们决定在未来的项目中使用 Gradle 作为更方便的工具,但我们也希望将 Gradle 用于我们的遗留项目。

我认为一次从 Maven 迁移到 Gradle 会非常痛苦,因为我们在 POM 文件中有大量代码(我们的构建逻辑非常繁重)。

我知道,Gradle 有自动迁移工具 (gradle init),但它不能正常工作(我认为这个工具适用于没有特定构建逻辑的小型 Maven 项目)。

那么,这里有一个问题:我可以将 Gradle 模块包含到 Maven 项目中 以小步骤进行迁移吗?也许有 Maven 插件,允许将build.gradle 视为pom.xml 文件?

【问题讨论】:

    标签: java maven gradle build refactoring


    【解决方案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://stackoverflow.com/a/62971663/8650621

      【讨论】:

        猜你喜欢
        • 2018-07-11
        • 2014-02-05
        • 1970-01-01
        • 2014-06-30
        • 2014-06-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-12-29
        相关资源
        最近更新 更多