[java] Java 클래스를 실행하는 Gradle (build.gradle을 수정하지 않고)

간단한 이클립스 플러그인 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   



답변

mvn exec:javaGradle에 직접 해당하는 것은 없으며 application플러그인을 적용 하거나 JavaExec작업 이 있어야합니다 .

application 플러그인

플러그인 활성화 :

plugins {
    id 'application'
    ...
}

다음과 같이 구성하십시오.

application {
    mainClassName = project.hasProperty("mainClass") ? 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시스템 속성으로 구성 하고 명령 줄 인수로 실행할 수도 있습니다 .


답변

First Zero의 대답을 확장하면 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;
    }


답변