maven 多模块项目如何包含 gradle 子项目?

Posted

技术标签:

【中文标题】maven 多模块项目如何包含 gradle 子项目?【英文标题】:How can a maven multi-module project include gradle sub-projects? 【发布时间】:2018-07-11 21:47:58 【问题描述】:

我们有一个 Maven 多模块项目,我们希望逐步迁移到一个 gradle 项目。

对于初学者,我只想将几个子项目迁移到 gradle,但将它们作为子项目保留到父 maven-project 构建。

是否有支持/推荐的方法?

对插件的指针,或任何如何最好地做到这一点的建议表示赞赏。

【问题讨论】:

【参考方案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 模块工件发布到某个本地存储库的情况下共享它。

【讨论】:

【参考方案2】:

要将构建的工件安装到您的本地 maven 存储库,只需将 maven plugin for gradle 添加到您的 build.gradle 文件中。然后,在@Stanislav 的 pom.xml 示例中使用 install 任务而不是 doSomething

【讨论】:

【参考方案3】:

将此添加到您正在尝试构建的 gradle 项目中,

uploadArchives 
        repositories 
            mavenLocal()
        
    

然后调用 gradle build publishToMavenLocal 这将构建项目/模块并将其推送到本地 maven repo (.m2) 以及生成的 pom 文件。然后你可以将它用作你以前的普通 maven 模块和 pom 文件。

阅读https://proandroiddev.com/tip-work-with-third-party-projects-locally-with-gradle-961d6c9efb02了解更多信息。

【讨论】:

以上是关于maven 多模块项目如何包含 gradle 子项目?的主要内容,如果未能解决你的问题,请参考以下文章

gradle构建聚合工程

如何在多模块项目中使用 JUnit5 和 SpringBoot2 通过 gradle 而不是 intelliJ 运行测试

Gradle 5 Kotlin DSL:多模块项目中的常见任务和 Maven 工件

maven创建子项目(适用于多模块管理项目)

Eclipse创建Maven多模块工程

将 Gradle 模块包含到 Maven 项目中