可以执行 Java 类(不需要修改 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
142330 次浏览

你只需要使用 Gradle Application 插件:

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

然后是简单的 gradle run

正如 Teresa 指出的,您还可以将 mainClass配置为系统属性,并使用命令行参数运行。

没有直接等同于 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 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 = bye

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;
}