【问题标题】:Custom dependency management plugin in GradleGradle 中的自定义依赖管理插件
【发布时间】:2013-12-25 12:51:36
【问题描述】:

如何编写自定义 gradle 插件来处理自定义模块描述符中的依赖项,来自自定义存储库? gradle 文档说明了以下内容,但我无法找到任何告诉我如何的内容。

即使您的项目使用的是自定义依赖管理系统或 类似于 Eclipse .classpath 文件作为主数据 依赖管理,很容易写个Gradle插件来使用 Gradle 中的这些数据。

我一直在维护一个 Custom Ivy resolver for ATG projects(从 this project 分叉),但 Gradle 最近在 1.8 版中弃用了它,我需要将实现移植到本机 Gradle 插件。

ATG 的实现使用“模块”(与 Gradle 项目不同),它有一个用于模块描述符的 MANIFEST.MF 文件。这些文件定义了模块所依赖的其他“模块”,以及构成当前模块的(直接)类路径的路径列表(jar 或目录)。

例如

ATG-Class-Path: lib/classes.jar lib/commons-beanutils-1.7.jar
ATG-Required: MyProj.core MyProj.integration.webservices DAF.Endeca.Assembler

模块依赖关系是可传递的,可能指的是自定义模块或位于 ATG 产品安装中的模块。因此,我需要定义一个可以使用 ATG 产品安装作为工件来源的自定义存储库。

没有Gradle,我需要以如下形式维护依赖关系

  1. ATG 的 MANIFEST.MF 文件
  2. Eclipse .classpath 文件
  3. Ant 构建脚本的依赖项
  4. SonarQube 配置

由于我无法摆脱 ATG MANIFEST.MF 文件,我想编写一个自定义插件以允许它们在 Gradle 构建中使用。然后我可以使用 Gradle 作为我的构建系统,它还可以生成 Eclipse .classpath 和 .project 文件,并针对项目运行 Sonar。

Gradle 似乎有很多源代码,过去几天翻遍它并没有找到任何地方。

如果有人能指出需要实现的接口列表(1)实现自定义存储库,(2)实现自定义依赖解析器(使用自定义文件作为模块描述符),那就足够了让我开始。

【问题讨论】:

    标签: gradle


    【解决方案1】:

    上面提到的 Eclipse .classpath 用例可以通过解析该文件并将其转换为 Gradle 文件依赖项来解决。目前无法插入自定义存储库实现。

    【讨论】:

    • 了解如何处理 .classpath 文件至少可以解决我一半的问题,所以如果你能解释它是如何工作的,那将会有所帮助。
    • 解析 .classpath 文件(例如,使用 Groovy 的 XmlSlurper 类)并以与在普通构建脚本中相同的方式添加文件依赖项。
    猜你喜欢
    • 1970-01-01
    • 2019-01-30
    • 1970-01-01
    • 1970-01-01
    • 2012-10-23
    • 2017-11-15
    • 2013-06-15
    • 2013-09-25
    相关资源
    最近更新 更多