首页 文章

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

提问于
浏览
8

我们有一个使用java插件的Gradle项目,它有几个需要构建的命令行工具 . 该项目只是打包成一个带有依赖项的jar . 然后,我们想要几个启动脚本来为这些工具中的每个工具启动该项目中的各个入口点 .

当然,应用程序插件是一个不错的选择 . 所以我们将 java 更改为 application 并提供 mainClassName 来创建启动脚本和tar distributable . 这有助于创建单个应用程序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构建文件夹保存该jar的副本以及所有依赖项的另一个副本 . 多数民众赞成感觉有点浪费 . 对于那些看到子项目的新开发人员来说,所有这些任务都没有任何代码,这也可能会令人困惑 .

有没有更好的方法来告诉gradle做多个与应用程序相关的任务,但是为每个任务更改mainClassName而不必求助于创建空子项目?

谢谢!

1 回答

  • 2

    您可以随时下拉到任务级别并自行声明/配置/连接必要的任务,或者在 apply plugin: "application" 提供的基础上声明其他任务 . 请参阅Gradle用户指南中的application plugin章节,了解相关任务的可用性 .

相关问题