有没有一种方法可以在Maven构建环境中使用Gradle API?

时间:2019-03-07 06:16:36

标签: java maven gradle

我正在构建一个从其他gradle项目中检索依赖项列表的maven项目。 (使用Java而不是mvn控制台)

我想使用Gradle API中的getDependencies()函数,如下所示。

import org.gradle.api.artifacts.Configuration;
import org.gradle.api.artifacts.dsl.DependencyHandler;

DependencyHandler dependencies = project.getDependencies();

但是看来Gradle API只能在Gradle构建环境中使用。

我在pom.xml中添加了gradle-core,如下所示,但它似乎没有我需要撤消依赖项的api

<dependency>
  <groupId>org.gradle</groupId>
  <artifactId>gradle-core</artifactId>
  <version>2.2.1</version>
</dependency>

是否可以在Maven构建环境中使用Gradle API?

1 个答案:

答案 0 :(得分:0)

从技术上讲,它可能是可能的,因为Gradle的核心只是Java。但是,您需要构造Gradle项目,构造子项目,调用各种生命周期方法,以及Gradle要做的许多其他事情才能正确创建Project实例。

话虽如此,仅通过ProcessBuilder通过命令调用Gradle来获取dependencies任务的依赖项列表是非常容易的。像这样:

ProcessBuilder processBuilder = new ProcessBuilder();
processBuilder.command("gradlew", "dependencies");
Process process = processBuilder.start();

try (var reader = new BufferedReader(new InputStreamReader(process.getInputStream()))) {
    while ((line = reader.readLine()) != null) {
        // Do something with the output
    }
}

如果您可以访问Gradle项目,那么创建一个custom Gradle task可以大大简化所有工作,而https://premiere-scripting-guide.readthedocs.io/4%20-%20Project%20Item%20object/projectItem.html?highlight=mediaType可以创建一个文件(JSON或所需的任何格式),包含所有依赖项以及所需的任何其他内容。这样,您可以使用上面的示例来调用自定义任务,然后在Maven中以易于阅读的格式使用文件。