Gradle应用程序插件-为具有不同mainClassName的同一项目构建多个启动脚本/ dists

问题描述 投票:9回答:2

我们有一个使用Java插件的Gradle项目,该项目具有一些需要构建的命令行工具。该项目只是与相关性一起打包到一个jar中。然后,我们希望使用几个启动脚本为每个工具启动该项目中的各个入口点。

自然地,application插件是一个不错的选择。因此,我们将java更改为application,并提供了mainClassName来创建启动脚本和可分发的tar。这有助于创建单个应用程序jar,但是只有一组使用指定的[[mainClassName的启动脚本。

我们如何为不同的入口点创建多个启动脚本? (不同的mainClassName?)

我尝试的一种方法是创建一些子项目,这些子项目应用了

application

插件并分别指定了各个mainClassNames。>allprojects { apply plugin: 'java' repositories { // maven repos } dependencies { compile 'com.thirdparty:somejar:1.0' } sourceCompatibility = 1.7 } subprojects { apply plugin: 'application' } project(':tools:csvLoader') { mainClassName = 'com.demo.tools.csvLoader.Loader' } project(':tools:summariser') { mainClassName = 'com.demo.tools.summary.Summarise' }
并在根项目的settings.gradle中引用

include "tools","tools:csvLoader","tools:summariser"

这有效-但是每个子项目都创建一个相同的jar(仅以子项目的名称命名),每个subdir构建文件夹都包含该jar的副本以及所有依赖项的另一个副本。那感觉有点浪费。这也可能会使新开发人员看到那里有所有这些任务且没有任何代码的子项目,从而造成混乱。

是否有更好的方法告诉gradle进行多个与应用程序相关的任务,而不必更改空类子项目即可更改每个mainClassName?

谢谢!

我们有一个使用Java插件的Gradle项目,该项目具有一些需要构建的命令行工具。该项目只是与相关性一起打包到一个jar中。然后,我们想要几个...

gradle
2个回答
2
投票
您总是可以下拉至任务级别,自己声明/配置/连接必要的任务,或者在apply plugin: "application"提供的内容之上声明其他任务。有关可用的相关任务,请参见Gradle用户指南中的application plugin一章。

1
投票
这是使用Gradle的application插件生成多个启动脚本的一种方法:
© www.soinside.com 2019 - 2024. All rights reserved.