私は現在、mainメソッドでJavaクラスを実行するだけで動作するgradleビルドスクリプトを持っています。私が知りたいことは、同じクラスで静的メソッドを呼び出すにはどうすればよいのですが、mainメソッドを実行する必要はありません。Gradleから静的なJavaメソッドを呼び出す方法
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クラスは、次のように:
: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
私の質問は、私はスキップすることができますどのように単純です:
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);
}
}
これは私に出力を与え、次のように現在のGradleコードがありますメインのメソッドを呼び出し、メソッド "anotherMethod"をgradleスクリプトから直接呼び出しますか?出力は、単純に次のようになります。
In anotherMethod
arg1 arg2
おかげ
Gradleビルドのコンテキスト(つまりクラスローダー)で実行するのか、別のプロセスとして実行しますか? 'JavaExec'タスクはシェルから' java'コマンドを呼び出すのと同じように動作します。これは常に 'main'メソッドを実行します。 – ajoberstar
私は理想的には別のプロセスとして実行するのが好きです。 Gradleでこれを達成する方法はありますか?さらに、このJavaメソッドは、Gradleスクリプトの実行中に何度も呼び出されます。したがって、同じJavaメソッドを呼び出すたびに新しいJVMを起動せず、同じJVM内で実行することをお勧めします。それは理にかなっていますか? – user1683481
Hmm ...同じプロセスを使って繰り返し呼び出すことができる別個のプロセスにしたい場合は、デーモンやサービスのように見えます。 Gradleの 'JavaExec'は、シェルから' java'コマンドを呼び出すのと同等のものをサポートしています。つまり、** once **を指定したクラスのmainメソッドを実行します。 Gradleは必要なGroovyコードを実行できますので、これを行うことは可能ですが、わかりやすい方法はありません。 – ajoberstar