在一个 Maven 工件中发布多个 Gradle 模块
Publish multiple Gradle modules in one Maven artifact
我有一个包含两个不同 API(a
和 b
)的库项目,它们应该在相同的 core
和 base
代码上运行。 core
对 a
或 b
的用户隐藏,因此对 core
存在 implementation
依赖性。但是 base
暴露给 a
或 b
的用户,因此 api
依赖于 base
.
只要你留在Gradle世界就没问题。但是当您使用 maven-publish
Gradle 插件发布 a
和 b
时,它会变得更加复杂。它分别创建了每个模块的工件,并(正确地)概述了它们之间的依赖关系。但我不想单独公开 core
和 base
。相反,我想将它们捆绑到 a
和 b
的一个工件中,其中 core
中的类型保留在内部,而 base
中的类型暴露。
有没有办法用 maven-publish
做到这一点?
有4个项目
a (api)
- 取决于 base
、core
b (api)
- 取决于 base
、core
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
在 a
和 b
build.gradle
api base
implementation core
在core
build.gradle
api base
您需要创建一个 fat/uber JAR。那里有很多教程,但常见的方法是使用 Shadow 插件:https://imperceptiblethoughts.com/shadow/
您可以将 Shadow 插件配置为 core
和 base
为 a
和 b
中的 embedded/included,而无需发布它们。
我有一个包含两个不同 API(a
和 b
)的库项目,它们应该在相同的 core
和 base
代码上运行。 core
对 a
或 b
的用户隐藏,因此对 core
存在 implementation
依赖性。但是 base
暴露给 a
或 b
的用户,因此 api
依赖于 base
.
只要你留在Gradle世界就没问题。但是当您使用 maven-publish
Gradle 插件发布 a
和 b
时,它会变得更加复杂。它分别创建了每个模块的工件,并(正确地)概述了它们之间的依赖关系。但我不想单独公开 core
和 base
。相反,我想将它们捆绑到 a
和 b
的一个工件中,其中 core
中的类型保留在内部,而 base
中的类型暴露。
有没有办法用 maven-publish
做到这一点?
有4个项目
a (api)
- 取决于 base
、core
b (api)
- 取决于 base
、core
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
在 a
和 b
build.gradle
api base
implementation core
在core
build.gradle
api base
您需要创建一个 fat/uber JAR。那里有很多教程,但常见的方法是使用 Shadow 插件:https://imperceptiblethoughts.com/shadow/
您可以将 Shadow 插件配置为 core
和 base
为 a
和 b
中的 embedded/included,而无需发布它们。