Java 是否可以使用gradle';应用程序';插件
我想使用Gradle“应用程序”插件为第二个mainClass创建startScripts。这可能吗?即使应用程序插件没有内置此功能,是否可以利用startScripts任务为不同的mainClass创建第二对脚本?您可以创建多个类型的任务,并在每个任务中配置不同的Java 是否可以使用gradle';应用程序';插件,java,gradle,Java,Gradle,我想使用Gradle“应用程序”插件为第二个mainClass创建startScripts。这可能吗?即使应用程序插件没有内置此功能,是否可以利用startScripts任务为不同的mainClass创建第二对脚本?您可以创建多个类型的任务,并在每个任务中配置不同的mainClassName。为方便起见,您可以在循环中执行此操作。将类似的内容添加到您的根构建中。gradle: // Creates scripts for entry points // Subproject must apply
mainClassName
。为方便起见,您可以在循环中执行此操作。将类似的内容添加到您的根构建中。gradle:
// Creates scripts for entry points
// Subproject must apply application plugin to be able to call this method.
def createScript(project, mainClass, name) {
project.tasks.create(name: name, type: CreateStartScripts) {
outputDir = new File(project.buildDir, 'scripts')
mainClassName = mainClass
applicationName = name
classpath = project.tasks[JavaPlugin.JAR_TASK_NAME].outputs.files + project.configurations.runtimeClasspath
}
project.tasks[name].dependsOn(project.jar)
project.applicationDistribution.with {
into("bin") {
from(project.tasks[name])
fileMode = 0755
}
}
}
然后按如下方式从根或子项目调用它:
// The next two lines disable the tasks for the primary main which by default
// generates a script with a name matching the project name.
// You can leave them enabled but if so you'll need to define mainClassName
// And you'll be creating your application scripts two different ways which
// could lead to confusion
startScripts.enabled = false
run.enabled = false
// Call this for each Main class you want to expose with an app script
createScript(project, 'com.foo.MyDriver', 'driver')
我将这两个答案的部分结合起来,得出了相对简单的解决方案:
task otherStartScripts(type: CreateStartScripts) {
description "Creates OS specific scripts to call the 'other' entry point"
classpath = startScripts.classpath
outputDir = startScripts.outputDir
mainClassName = 'some.package.app.Other'
applicationName = 'other'
}
distZip {
baseName = archivesBaseName
classifier = 'app'
//include our extra start script
//this is a bit weird, I'm open to suggestions on how to do this better
into("${baseName}-${version}-${classifier}/bin") {
from otherStartScripts
fileMode = 0755
}
}
startScripts是在应用程序插件时创建的 有没有现成的代码?对于我们这些同时学习groovy和gradle的人来说,文档并不能很好地解释如何“在一个循环中”完成这项工作。请参见以下答案:applicationDistribution如何。从(otherStartScripts){到“bin”}我们是否有可能创建一个启动脚本来设置程序的命令行参数?