簡體   English   中英

Gradle執行Java類(無需修改build.gradle)

[英]Gradle to execute Java class (without modifying build.gradle)

有一個簡單的 Eclipse 插件來運行 Gradle,它只是使用命令行方式來啟動 gradle。

什么是 maven 編譯和運行的 gradle 模擬mvn compile exec:java -Dexec.mainClass=example.Example

這樣任何帶有gradle.build項目都可以運行。

更新:有一個類似的問題什么是運行 Java 應用程序的 maven exec 插件的 gradle 等價物? 之前問過,但解決方案建議更改每個項目build.gradle

package runclass;

public class RunClass {
    public static void main(String[] args) {
        System.out.println("app is running!");
    }
}

然后執行gradle run -DmainClass=runclass.RunClass

:run FAILED

FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':run'.
> No main class specified   

gradle 中沒有與mvn exec:java直接等效的方法,您需要應用application插件或擁有JavaExec任務。

application插件

激活插件:

plugins {
    id 'application'
    ...
}

配置如下:

application {
    mainClassName = project.hasProperty("mainClass") ? project.getProperty("mainClass") : "NULL"
}

在命令行上寫

$ gradle -PmainClass=Boo run

JavaExec任務

定義一個任務,讓我們說execute

task execute(type:JavaExec) {
   main = project.hasProperty("mainClass") ? getProperty("mainClass") : "NULL"
   classpath = sourceSets.main.runtimeClasspath
}

要運行,請編寫gradle -PmainClass=Boo execute 你得到

$ gradle -PmainClass=Boo execute
:compileJava
:compileGroovy UP-TO-DATE
:processResources UP-TO-DATE
:classes
:execute
I am BOO!

mainClass是在命令行動態傳入的屬性。 classpath設置為拾取最新的類。


如果您不傳入mainClass屬性,則兩種方法都會按預期失敗。

$ gradle execute

FAILURE: Build failed with an exception.

* Where:
Build file 'xxxx/build.gradle' line: 4

* What went wrong:
A problem occurred evaluating root project 'Foo'.
> Could not find property 'mainClass' on task ':execute'.

您只需要使用Gradle 應用程序插件

apply plugin:'application'
mainClassName = "org.gradle.sample.Main"

然后簡單地gradle run

正如 Teresa 指出的那樣,您還可以將mainClassName配置為系統屬性並使用命令行參數運行。

擴展第一個零的答案,我猜你想要一些你也可以運行gradle build沒有錯誤的東西。

gradle buildgradle -PmainClass=foo runApp可以使用:

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

    main = project.hasProperty("mainClass") ? project.getProperty("mainClass") : "package.MyDefaultMain"
}

設置默認主類的位置。

您可以對其進行參數化並通過 gradle clean build -Pprokey=goodbye

task choiceMyMainClass(type: JavaExec) {
     group = "Execution"
    description = "Run Option main class with JavaExecTask"
    classpath = sourceSets.main.runtimeClasspath

    if (project.hasProperty('prokey')){
        if (prokey == 'hello'){
            main = 'com.sam.home.HelloWorld'
        } 
        else if (prokey == 'goodbye'){
            main = 'com.sam.home.GoodBye'
        }
    } else {
            println 'Invalid value is enterrd';

       // println 'Invalid value is enterrd'+ project.prokey;
    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM