首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Gradle执行Java类(不修改build.gradle)

Gradle执行Java类(不修改build.gradle)
EN

Stack Overflow用户
提问于 2014-01-26 09:21:06
回答 4查看 133.2K关注 0票数 124

有一个运行Gradle的simple Eclipse plugin,它只是使用命令行的方式来启动gradle。

什么是maven编译和运行mvn compile exec:java -Dexec.mainClass=example.Example的gradle模拟

这样,任何使用gradle.build的项目都可以运行。

更新:What is the gradle equivalent of maven's exec plugin for running Java apps?以前也问过类似的问题,但解决方案建议更改每个项目的build.gradle

代码语言:javascript
复制
package runclass;

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

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

代码语言:javascript
复制
:run FAILED

FAILURE: Build failed with an exception.

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

回答 4

Stack Overflow用户

回答已采纳

发布于 2014-01-26 14:48:14

gradle中没有直接等同于mvn exec:java的东西,你需要应用application插件或者有一个JavaExec任务。

application插件

激活插件:

代码语言:javascript
复制
plugins {
    id 'application'
    ...
}

按如下方式进行配置:

代码语言:javascript
复制
application {
    mainClassName = project.hasProperty("mainClass") ? project.getProperty("mainClass") : "NULL"
}

在命令行上,编写

代码语言:javascript
复制
$ gradle -PmainClass=Boo run

JavaExec任务

定义一个任务,比方说execute

代码语言:javascript
复制
task execute(type:JavaExec) {
   main = project.hasProperty("mainClass") ? getProperty("mainClass") : "NULL"
   classpath = sourceSets.main.runtimeClasspath
}

要运行,请编写gradle -PmainClass=Boo execute。你会得到

代码语言:javascript
复制
$ gradle -PmainClass=Boo execute
:compileJava
:compileGroovy UP-TO-DATE
:processResources UP-TO-DATE
:classes
:execute
I am BOO!

mainClass是在命令行中动态传入的属性。classpath设置为拾取最新的类。

如果不传入mainClass属性,这两种方法都会像预期的那样失败。

代码语言:javascript
复制
$ 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'.
票数 149
EN

Stack Overflow用户

发布于 2014-01-26 09:41:21

您只需要使用Gradle Application plugin

代码语言:javascript
复制
apply plugin:'application'
mainClassName = "org.gradle.sample.Main"

然后简单地使用gradle run

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

票数 142
EN

Stack Overflow用户

发布于 2017-02-16 04:37:43

扩展第一个零的答案,我猜你想要的东西,你也可以运行gradle build没有错误。

gradle buildgradle -PmainClass=foo runApp都可以处理以下内容:

代码语言:javascript
复制
task runApp(type:JavaExec) {
    classpath = sourceSets.main.runtimeClasspath

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

在那里设置默认的主类。

票数 28
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21358466

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档