在一个 Maven 工件中发布多个 Gradle 模块

Publish multiple Gradle modules in one Maven artifact

我有一个包含两个不同 API(ab)的库项目,它们应该在相同的 corebase 代码上运行。 coreab 的用户隐藏,因此对 core 存在 implementation 依赖性。但是 base 暴露给 ab 的用户,因此 api 依赖于 base.

只要你留在Gradle世界就没问题。但是当您使用 maven-publish Gradle 插件发布 ab 时,它会变得更加复杂。它分别创建了每个模块的工件,并(正确地)概述了它们之间的依赖关系。但我不想单独公开 corebase。相反,我想将它们捆绑到 ab 的一个工件中,其中 core 中的类型保留在内部,而 base 中的类型暴露。

有没有办法用 maven-publish 做到这一点?

有4个项目

a (api) - 取决于 basecore
b (api) - 取决于 basecore
core (lib) - 取决于 base
base (api) - none

假设所有人都使用 java-library 插件构建。

如果我答对了您的问题 - 您希望 end-users 看到 api 的 -a, b, base 而不是 core - 我假设这适用于发展 / Compile-time;

如果以上是正确的 - 这不是 maven-publish;而是依赖声明

请参阅https://docs.gradle.org/current/userguide/java_library_plugin.html#sec:java_library_separation

ab build.gradle

api base
implementation core

corebuild.gradle

api base

您需要创建一个 fat/uber JAR。那里有很多教程,但常见的方法是使用 Shadow 插件:https://imperceptiblethoughts.com/shadow/

您可以将 Shadow 插件配置为 corebaseab 中的 embedded/included,而无需发布它们。