请问,有人知道如何以编程方式从Restful方法或java类运行gradle构建任务吗? 谢谢。
答案 0 :(得分:5)
从你的问题来看,你想要实现的目标并不是很清楚,但在我看来,你正在寻找像Gradle Tooling API这样的东西。它允许:
- 查询构建的详细信息,包括项目层次结构和项目依赖项,外部依赖项(包括源和 Javadoc jars),每个项目的源目录和任务。
- 执行构建并侦听stdout和stderr日志记录和进度消息(例如,当'状态栏'中显示的消息时 你在命令行上运行。)。
- 执行特定的测试类或测试方法。
- 在构建执行时接收有趣的事件,例如项目配置,任务执行或测试执行。
- 取消正在运行的构建。
- 将多个单独的Gradle构建合并为一个复合构建。
- Tooling API可以下载并安装适当的Gradle版本,类似于包装器。
- 实现是轻量级的,只有少量的依赖项。它也是一个表现良好的图书馆,并没有 有关类加载器结构或日志记录配置的假设。
- 这使API易于嵌入您的应用程序中。
您可以在Gradle分发的samples/toolingApi
目录中找到一些示例。
至于你的任务,似乎你必须通过它的GradleConnector
方法创建forProjectDirectory(File projectDir)
的实例,然后得到它ProjectConnection
(通过connect()
)和BuildLauncher
(通过newBuild()
)。最后,使用BuildLauncher
的实例,您可以运行所需的任何任务。以下是javadocs的一个例子:
try {
BuildLauncher build = connection.newBuild();
//select tasks to run:
build.forTasks("clean", "test");
//include some build arguments:
build.withArguments("--no-search-upward", "-i", "--project-dir", "someProjectDir");
//configure the standard input:
build.setStandardInput(new ByteArrayInputStream("consume this!".getBytes()));
//in case you want the build to use java different than default:
build.setJavaHome(new File("/path/to/java"));
//if your build needs crazy amounts of memory:
build.setJvmArguments("-Xmx2048m", "-XX:MaxPermSize=512m");
//if you want to listen to the progress events:
ProgressListener listener = null; // use your implementation
build.addProgressListener(listener);
//kick the build off:
build.run();
} finally {
connection.close();
}