gpt4 book ai didi

java - 如何从 java 代码运行 gradle 任务?

转载 作者:行者123 更新时间:2023-11-29 08:28:58 25 4
gpt4 key购买 nike

我需要通过 java 方法将 gradle eclipse 任务运行到外部 gradle 项目,是否可以使用 Gradle Tooling API 来完成?

最佳答案

Gradle forum给出了以编程方式执行此操作的一个很好的示例,但由于它忽略了项目单独的 gradle 包装器,因此它不能保证构建的顺利执行,甚至会破坏您的应用程序。有关为什么您始终应该依赖 gradle 包装器的更多信息,请阅读 herehere .

使用 Gradle 包装器

推荐的方法是运行 exec并在将任务作为参数传递时调用项目包装器。此示例调用当前项目包装器并将 jar 作为参数传递:

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;

public class Main
{
private static String PATH_TO_GRADLE_PROJECT = "./";
private static String GRADLEW_EXECUTABLE = "gradlew.bat";
private static String BLANK = " ";
private static String GRADLE_TASK = "jar";

public static void main(String[] args)
{
String command = PATH_TO_GRADLE_PROJECT + GRADLEW_EXECUTABLE + BLANK + GRADLE_TASK;
try
{
Runtime.getRuntime().exec(command);
}
catch (IOException e)
{
e.printStackTrace();
}
}
}

使用 Gradle Tooling API

要在外部项目上使用 Gradle 工具 api,您只需定义 GradleConnector 对象的属性 forProjectDirectory。要在 BuildLauncher 对象上运行任务调用 run()。下面的例子演示了基本原理:

import org.gradle.tooling.BuildLauncher;
import org.gradle.tooling.GradleConnector;
import org.gradle.tooling.ProjectConnection;

import java.io.File;

public class ToolingAPI
{
private static final String GRADLE_INSTALLATION = "C:\\Program Files\\Gradle";
private static final String GRADLE_PROJECT_DIRECTORY = "path_to_root_of_a_gradle_project";
private static final String GRADLE_TASK = "help";

private GradleConnector connector;

public ToolingAPI(String gradleInstallationDir, String projectDir)
{
connector = GradleConnector.newConnector();
connector.useInstallation(new File(gradleInstallationDir));
connector.forProjectDirectory(new File(projectDir));
}

public void executeTask(String... tasks)
{
ProjectConnection connection = connector.connect();
BuildLauncher build = connection.newBuild();
build.forTasks(tasks);

build.run();
connection.close();
}

public static void main(String[] args)
{
ToolingAPI toolingAPI = new ToolingAPI(GRADLE_INSTALLATION, GRADLE_PROJECT_DIRECTORY);
toolingAPI.executeTask(GRADLE_TASK);
}
}

这种方法的缺点是执行任务时 gradle 的位置不感知。如果您在自定义任务中调用任何文件创建或修改方法,如 new File("somefile"),将引发异常。

关于java - 如何从 java 代码运行 gradle 任务?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49876189/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com