为什么没有用 Gradle 创建胖 Jar 的简单方法?
Why is there no easy way to create a fat Jar with Gradle?
我正在构建一个依赖于几个小型库的轻量级 API 客户端。我需要把它打包成一个罐子分发给客户。我正在使用 IntelliJ、Gradle、Kotlin 生态系统。
Gradle 提供了构建 Jar 的任务,但它不包含依赖项,因此对我来说毫无用处。构建源代码+依赖项不是比仅源代码更常见吗?为什么没有这样的任务?似乎我的大多数 google 搜索都指向我自己编写的 Gradle 任务,这些任务会将依赖项捆绑在一起。
或者图书馆的构建频率是否有不同的做法?
我假设有问题的 JAR 是私有的,因为你使用了 client。
社区有一个经常推荐的插件:https://imperceptiblethoughts.com/shadow/
Gradle 还提供了一个插件来创建 fat/uber JAR,但更适合应用程序,因此得名:Application plugin。 -- 稍后详细介绍
如果您打算将您正在创建的 API 客户端 JAR 用于其他客户端的构建工具,例如 Maven 或 Gradle,那么您不应该创建一个胖 JAR,而是应该记录为了让客户端包含您的 API 客户端 JAR,他们需要在构建过程中提供 X、Y、Z 依赖项。您还需要传达您支持的最低或最高支持版本。这使客户端可以灵活地从他们想要的任何地方提供 X、Y、Z 依赖项。这就是 Java plugin 提供的 jar
任务发挥作用的地方。
但是如果您不希望客户端覆盖您的客户端使用的内部依赖项的版本,那么是的,您将需要构建一个包含那些依赖项的胖 JAR,这就是 Shadow 插件(上面链接)进入的地方播放.
现在回到应用程序插件,在下面,它应用了 Distribution 插件,它提供了创建胖 JAR 的能力。然而,由于我不知道的原因,这并不常用,相反你会发现前面提到的 Shadow 插件更常用。这可能是因为 Shadow 插件对如何将依赖项打包到胖 JAR 中提供了更多控制,例如重新定位包。
我正在构建一个依赖于几个小型库的轻量级 API 客户端。我需要把它打包成一个罐子分发给客户。我正在使用 IntelliJ、Gradle、Kotlin 生态系统。
Gradle 提供了构建 Jar 的任务,但它不包含依赖项,因此对我来说毫无用处。构建源代码+依赖项不是比仅源代码更常见吗?为什么没有这样的任务?似乎我的大多数 google 搜索都指向我自己编写的 Gradle 任务,这些任务会将依赖项捆绑在一起。
或者图书馆的构建频率是否有不同的做法?
我假设有问题的 JAR 是私有的,因为你使用了 client。
社区有一个经常推荐的插件:https://imperceptiblethoughts.com/shadow/
Gradle 还提供了一个插件来创建 fat/uber JAR,但更适合应用程序,因此得名:Application plugin。 -- 稍后详细介绍
如果您打算将您正在创建的 API 客户端 JAR 用于其他客户端的构建工具,例如 Maven 或 Gradle,那么您不应该创建一个胖 JAR,而是应该记录为了让客户端包含您的 API 客户端 JAR,他们需要在构建过程中提供 X、Y、Z 依赖项。您还需要传达您支持的最低或最高支持版本。这使客户端可以灵活地从他们想要的任何地方提供 X、Y、Z 依赖项。这就是 Java plugin 提供的 jar
任务发挥作用的地方。
但是如果您不希望客户端覆盖您的客户端使用的内部依赖项的版本,那么是的,您将需要构建一个包含那些依赖项的胖 JAR,这就是 Shadow 插件(上面链接)进入的地方播放.
现在回到应用程序插件,在下面,它应用了 Distribution 插件,它提供了创建胖 JAR 的能力。然而,由于我不知道的原因,这并不常用,相反你会发现前面提到的 Shadow 插件更常用。这可能是因为 Shadow 插件对如何将依赖项打包到胖 JAR 中提供了更多控制,例如重新定位包。