У меня есть сценарий построения градиента, который в настоящее время работает, просто выполняя класс Java через его основной метод. Я хочу знать, как я могу вызвать статический метод в том же классе, но не должен проходить основной метод. Текущий Gradle код выглядит следующим образом:Как вызвать статический метод Java из Gradle
import org.apache.tools.ant.taskdefs.condition.Os
apply plugin: 'java'
defaultTasks 'runSimple'
project.ext.set("artifactId", "test-java")
File rootDir = project.getProjectDir()
File targetDir = file("${rootDir}/target")
FileCollection javaClasspath = files("${targetDir}/tools.jar")
task(runSimple, dependsOn: 'classes', type: JavaExec) {
main = 'com.test.model.JavaTest'
classpath = javaClasspath
args 'arg1'
args 'arg2'
}
И мой класс Java следующим образом:
package com.test.model;
public class JavaTest {
public static void main(String[] args) throws Exception {
System.out.println("In main");
anotherMethod(args[0], args[1]);
}
public static void anotherMethod(String arg1, String arg2) {
System.out.println("In anotherMethod");
System.out.println(arg1 + " " + arg2);
}
}
Это дает мне выход:
:compileJava UP-TO-DATE
:processResources UP-TO-DATE
:classes UP-TO-DATE
:runSimple
In main
In anotherMethod
arg1 arg2
BUILD SUCCESSFUL
Total time: 2.344 secs
Мой вопрос заключается лишь в том, как я могу пропустить основной метод и вызов метода «anotherMethod» непосредственно из сценария градации? Выходной сигнал будет тогда просто:
In anotherMethod
arg1 arg2
Благодаря
Вы хотите, чтобы он запускался в контексте (то есть загрузчик классов) сборки Gradle или как отдельный процесс? Задача '' JavaExec' работает так же, как вызов команды 'java' из оболочки. Он всегда будет выполнять метод 'main'. – ajoberstar
Мне бы идеально хотелось, чтобы он работал как отдельный процесс. Есть ли способ достичь этого в Gradle? Furthemore, этот Java-метод будет вызываться много раз во время выполнения сценария Gradle. Поэтому я бы хотел, чтобы он не разворачивал новый JVM каждый раз, когда он вызывал один и тот же метод Java и запускался в пределах одной JVM. Имеет ли это смысл? – user1683481
Хм ... Если вы хотите, чтобы это был отдельный процесс, который вы можете вызывать многократно, используя тот же процесс, он больше похож на демона или службы. Gradle 'JavaExec' просто поддерживает эквивалент вызова команды' java' из оболочки. То есть, он будет запускать основной метод класса, который вы указываете ** один раз **. Gradle может запускать любой код Groovy, который вы хотите, поэтому я уверен, что это можно сделать, но я не вижу прямого пути. – ajoberstar