【问题标题】:Is there a way to use Gradle API within a Maven build Environment?有没有办法在 Maven 构建环境中使用 Gradle API?
【发布时间】:2019-03-07 06:16:35
【问题描述】:

我正在构建一个从其他 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?

【问题讨论】:

  • 您到底想在哪里读取依赖项?在 Java 程序中?在 Maven 插件中?
  • @JFMeier 我想读取Java程序中的依赖关系~
  • 您从哪里阅读 gradle 项目?从 git?来自 Maven 存储库?

标签: java maven gradle


【解决方案1】:

从技术上讲,它可能是可能的,因为 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 会容易得多,该 custom Gradle task 会创建一个包含所有依赖项以及您需要的任何其他内容的文件(JSON 或您需要的任何格式)。这样您就可以使用上面的示例调用自定义任务,然后在 Maven 中以易于阅读的格式使用该文件。

【讨论】:

    猜你喜欢
    • 2017-01-23
    • 1970-01-01
    • 1970-01-01
    • 2016-02-29
    • 2022-12-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多