我们有一个使用 java 插件的 Gradle 项目,它有几个需要构建的命令行工具。该项目只是打包成一个 jar 及其依赖项。然后,我们需要几个启动脚本来启动该项目中每个工具的各个入口点。
应用插件自然是一个不错的选择。所以我们改变了 java 至 申请并提供了 mainClassName
创建启动脚本和 tar 可分发的。这有助于创建单个应用程序 jar,但只有一组使用指定的 mainClassName 的启动脚本。
我们如何为不同的入口点创建多个启动脚本? (不同的 mainClassName
的?)
我尝试过的一种方法是创建一些应用了应用程序插件的子项目,并单独指定了各个 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 build 文件夹都包含该 jar 的副本以及所有依赖项的另一个副本。感觉有点浪费。新开发人员看到那里的子项目有所有这些任务而没有任何代码也可能会感到困惑。
有没有更好的方法告诉 gradle 执行多个与应用程序相关的任务,但更改每个任务的 mainClassName 而不必求助于创建空的子项目?
谢谢!
最佳答案
您始终可以下拉到任务级别并自己声明/配置/连接必要的任务,或者在 apply plugin: "application"
之上声明其他任务。提供。见 application plugin Gradle 用户指南中提供相关任务的章节。
关于Gradle 应用程序插件 - 为具有不同 mainClassName 的同一项目构建多个启动脚本/dist,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20736537/