Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/extjs/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何从java代码运行gradle任务?_Java_Gradle_Gradle Eclipse - Fatal编程技术网

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

如何从java代码运行gradle任务?,java,gradle,gradle-eclipse,Java,Gradle,Gradle Eclipse,我需要从java方法将gradle eclipse任务运行到外部gradle项目,是否可以使用gradle工具API执行此任务?以编程方式提供了一个很好的示例,但由于它忽略了项目的单个gradle包装,它不能保证构建的顺利执行,甚至不能破坏应用程序。有关为什么始终应该依赖gradle包装器的更多信息,请阅读和 使用渐变包装器 建议的方法是在将任务作为参数传递时运行并调用项目包装器。此示例调用当前项目包装器并将jar作为参数传递: import java.io.BufferedReader; im

我需要从java方法将gradle eclipse任务运行到外部gradle项目,是否可以使用gradle工具API执行此任务?

以编程方式提供了一个很好的示例,但由于它忽略了项目的单个gradle包装,它不能保证构建的顺利执行,甚至不能破坏应用程序。有关为什么始终应该依赖gradle包装器的更多信息,请阅读和

使用渐变包装器

建议的方法是在将任务作为参数传递时运行并调用项目包装器。此示例调用当前项目包装器并将
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 BALNK = " ";
    private static String GRADLE_TASK = "jar";

    public static void main(String[] args)
    {
        String command = PATH_TO_GRADLE_PROJECT + GRADLEW_EXECUTABLE + BALNK + GRADLE_TASK;
        try
        {
            Runtime.getRuntime().exec(command);
        }
        catch (IOException e)
        {
            e.printStackTrace();
        }
    }
}
使用Gradle工具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对位置不敏感。如果您在自定义任务中调用任何文件创建或修改方法,如
新建文件(“somefile”)
将引发异常。

我不确定您希望通过这样做实现什么。你能举个例子吗?事实上,从我的Gradle项目中,我操纵着其他Gradle项目;我希望能够在这些gradle项目上运行eclipse任务(gradle eclipse插件),以便可以从eclipse打开这些项目,我希望您理解我的问题。@unkepluto,但没有建议的解决方案。“这种方法的缺点是在执行任务时对gradle的位置一无所知。”为什么?