具有多个主类的Gradle应用程序插件

mmvthczy  于 2023-04-21  发布在  其他
关注(0)|答案(4)|浏览(207)

我正在使用gradle 'application'插件来启动我的应用程序。这很好用。现在我想添加在同一个项目中启动不同主类的选项。我可以更改插件的配置来允许吗?

apply plugin: 'application'

mainClassName = "net.worcade.my.MainClass"
y53ybaqx

y53ybaqx1#

http://mrhaki.blogspot.com/2010/09/gradle-goodness-run-java-application.html

apply plugin: 'java'

task(runSimple, dependsOn: 'classes', type: JavaExec) {
   main = 'com.mrhaki.java.Simple'
   classpath = sourceSets.main.runtimeClasspath
   args 'mrhaki'
   systemProperty 'simple.message', 'Hello '
}

显然,你可以改变的是:

  • runSimple可以被命名为任何你想要的名字
  • 根据需要设置main
  • 如果不需要,则清除args和systemProperty

要运行:

gradle runSimple

您可以根据需要将这些文件放入build.gradle文件中。

gwo2fgha

gwo2fgha2#

您可以直接使用属性配置应用程序插件:

application {
    mainClassName = project.findProperty("chooseMain").toString()
}

在命令行中,你可以传递主类的名称:

./gradlew run -PchooseMain=net.worcade.my.MainClass
iezvtpos

iezvtpos3#

如果您需要打包应用程序,可以使用以下方法生成多个启动脚本

application {
    applicationName = "myapp"
    mainClassName = "my.Main1"
}
tasks.named<CreateStartScripts>("startScripts") {
    applicationName = "myapp-main1"
}
val main2StartScripts by tasks.register("main2StartScripts", CreateStartScripts::class) {
    applicationName = "myapp-main2"
    outputDir = file("build/scripts") // By putting these scripts here, they will be picked up automatically by the installDist task
    mainClassName = "my.Main2"
    classpath = project.tasks.getAt(JavaPlugin.JAR_TASK_NAME).outputs.files.plus(project.configurations.getByName(JavaPlugin.RUNTIME_CLASSPATH_CONFIGURATION_NAME)) // I took this from ApplicationPlugin.java:129
}
tasks.named("installDist") {
    dependsOn(main2StartScripts)
}
erhoui1w

erhoui1w4#

使用javaExec任务处理:

task run(type: JavaExec) {
    classpath = sourceSets.main.runtimeClasspath

    if (project.hasProperty('chooseMain')){
        if (chooseMain == 'Main1'){
            main = 'application.Main1'
        } else if (chooseMain == 'second'){
            main = 'application.Main2'
        }
    } else {
        println 'please pass the main name'
    }
}

然后从命令行以这种方式传递您的选项:

gradle run -PchooseMain=first

相关问题