【发布时间】:2013-07-11 10:05:58
【问题描述】:
我有一个 gradle 构建脚本,目前只需通过它的 main 方法执行一个 Java 类即可。我想知道的是,我怎样才能在同一个类中调用静态方法而不必通过main方法。目前的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
我的问题很简单,我怎样才能跳过主要方法,直接从 gradle 脚本调用方法“anotherMethod”?输出将是:
In anotherMethod
arg1 arg2
谢谢
【问题讨论】:
-
您希望它在 Gradle 构建的上下文(即类加载器)中运行,还是作为单独的进程运行?
JavaExec任务的工作方式就像从 shell 调用java命令一样。它将始终执行main方法。 -
我希望它作为一个单独的进程运行。有什么方法可以在 Gradle 中实现这一点吗?此外,在执行 Gradle 脚本期间,将多次调用此 Java 方法。因此,我希望它不要在每次调用同一个 Java 方法时启动一个新的 JVM,并在同一个 JVM 中运行。这有意义吗?
-
嗯...如果您希望它是一个单独的进程,您可以使用相同的进程重复调用它,它看起来更像是一个守护进程或服务。 Gradle 的
JavaExec仅支持等效于从shell 调用java命令。也就是说,它将运行您指定的类的主方法一次。 Gradle 可以运行任何你想要的 Groovy 代码,所以我确信可以做到这一点,但我没有看到任何直接的方法。 -
为什么不创建一个带有 main 方法的 Bootstrap 类,该类调用需要执行多次的静态方法?这样你就只有一个 JVM 运行你的代码。
标签: java gradle build.gradle