以maven可发布兼容的方式构建gradle插件+共享代码+库(目前子项目是一个问题)

问题描述 投票:0回答:1

我想结合以下内容:

  • 可以访问共享 kotlin 库的 gradle 插件
  • 共享的 kotlin 库
  • 可以访问 gradle 插件以及共享 kotlin 库的库

基本设置是Gradle插件 - 对主项目中也使用的Java模块的依赖的结果,它基于完整子项目的包含构建,遗憾的是,该解决方案仅在本地工作,但当我使用时并不能解决问题想通过maven插件发布所有模块。

当前设置如下:

项目设置

  • settings.gradle.kts
  • gradle 插件
    • settings.gradle.kts
    • 插件
    • 共享
  • 图书馆
    • 模块1
    • 模块2
    • ...

设置说明

  • gradle-plugin:这是一个子项目,有自己的
    settings.gradle.kts
    文件
    • 插件...gradle 插件
    • 共享...必须在插件内部以及所有模块内部可用的纯 kotlin 模块
  • module1...一个库模块,在我的例子中是一个android库
  • module2...第二个库模块,在我的例子中是一个android库
根中的

settings.gradle.kts

includeBuild("gradle-plugin")
include("library/module1")
include("library/module2")
子项目里面的

settings.gradle.kts
gradle-plugin

include("plugin")
include("shared")

问题

我现在想要更改结构和设置,所有这些不仅可以在本地运行,还可以简单地发布在 Maven 上。当前的解决方案有一个缺点,子项目的所有模块都没有发布到maven上,因为根项目的

publishToMavenLocal
任务不知道子项目内的模块。

有人可以帮我解释一下,我如何调整这个设置,以便我也可以简单地将它发布到 Maven 上吗?

maven gradle
1个回答
0
投票

正常发布

每个 Gradle 模块都是它自己的项目,在正常的 Java/Kotlin 设置中将生成自己的 JAR 文件作为传出工件。

您可以通过在每个项目中添加和配置 Maven 发布插件 (

maven-publish
) 来为每个项目发布此 JAR,然后运行发布任务。因此,在您的情况下,这将包括在
plugin
shared
module1
module2
中这样做。

在 Maven 存储库中,每个项目都会附带一个

pom.xml
文件(由插件生成),该文件使用 Maven 坐标1 告诉构建工具该项目的依赖项是什么。因此,我可以通过访问您的存储库,启动我自己的 Gradle 项目,添加
module1
作为依赖项,然后我希望 Gradle 能够在
pom.xml
之后找到存储库中的所有其他依赖项。

配置发布任务

如果您正在跨项目设置非常相似的发布配置,您可能会发现有很多重复。这是另一个 Gradle 插件的另一个用例。您可以在其中编写您的共享配置并将其应用到需要此类发布配置的项目中。

胖罐子

您可能不喜欢该输出,因为它将程序分散到太多不同的模块中。如果您想更改它,那么您要么必须重新配置 Gradle 设置以使用更少的模块,要么需要移动已编译的 Java

.class
文件和任何资源以减少工件/JAR 的数量。您可以通过构建所谓的 fat JAR 来做到这一点,Gradle 已经就此编写了一些指南

运行发布任务

我不确定您是否也在询问如何运行发布任务。

当您从根项目运行像

publishToMavenLocal
这样的任务时,它将运行具有该名称的所有子项目中的所有任务(docs)。在您的情况下,假设您已经在这些项目中设置了发布,那么将会发布
module1
module2

它不会发布

plugin
shared
,因为它们位于包含的版本中。为此,您可以单独运行
./gradlew :gradle-plugin:publishToMavenLocal
来运行该单独的多项目项目中的发布任务。

如果运行这两个单独的任务仍然太繁琐,您可以将它们全部链接在一起,因为可以从主项目调用包含的构建任务(docs)。


1这取自每个子项目的

group
name
version
属性,因此请确保根据您的喜好配置这些属性。

© www.soinside.com 2019 - 2024. All rights reserved.