[英]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 build
和gradle -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.