Gradle:创建一个不可执行的jar和可执行的shell脚本,带有依赖库作为包分发

Gradle: Create a non-executable jar and executable shell script with dependent libraries as a package distribution

我不太喜欢为 java 程序创建胖可执行 jar,因为当我有来自同一项目的多个可执行程序时,它会涉及大量开销。

我希望能够创建一个类似库的 jar 并创建相应的 .sh 脚本,这些脚本几乎具有以下结构:

java -cp classpath_libs main_class program_args...

或任何其他可执行文件,我可以根据自己的需要以类似的方式对其进行自定义(例如:hadoop jar project_jar main_class classpath_libs program_args)。这在 gradle 中可以实现吗?如果是这样,如何?请注意,我需要使用来自单个项目的不同 main 类 创建多个脚本。

这里的关键要求是能够使用最终完全解析的类路径字符串。

更新:我看过使用 application 插件的示例,但它创建了一个可执行 jar,其中包含打包到其中的依赖库。这不是我要找的。

据我所知,似乎没有插件可以直接处理这个问题。因此,我使用了 java-library 插件,使用了 configurations.runtime 类路径值并创建了必要的脚本和复制任务以将必要的库复制到必要的目录中。对于任何有兴趣的人,您也可以尝试 application 插件中的 distZip 选项,其中 gradle 会创建用于执行的脚本并将必要的库打包到一个发行版中。您可以查看脚本的输出以了解类路径的结构并创建类似的东西。