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

标签 gradle

我们有一个使用 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/

相关文章:

mongodb - Spring Boot无法找到我的模板 View ,发生意外错误(类型=未找到,状态= 404)

android - ./gradlew assembleRelease 更新以将 native 59.8 和 gradle react 为 5.1 时构建失败

java - 无法使用 @Autowired 创建 bean

android - SonarQube 5.6没有显示Android项目的testcoverage报告

android - 尝试解决 Gradle 中的相互依赖关系

web - Gradle-如何在简单的Java项目中将 war 添加为依赖项

java - 两个不同的 jar x,y 依赖于不同版本的 z。用户如何在他的应用程序中同时拥有 x,y ?

java - "--continue"标志的 Gradle 属性?

gradle - 在Android Studio中禁用 Assets 压缩

android - 为 Android 客户端库编译新的 Places SDK 在 transformClassesWithDexBuilder 失败