如何自定义每个依赖项的目标路径

时间:2015-06-25 17:39:31

标签: groovy gradle

我正在尝试使用Gradle来管理非Java项目中的依赖项。我们的想法是拥有一个单独的通用插件,它与项目的gradle.build文件一起将项目所需的任何依赖项带入项目,将每个依赖项放在项目期望文件驻留的位置。目前,它正在将它们全部放在项目的/ libs /文件夹中,但这还不够。我希望能够做的是在gradle.build文件中指定将依赖项放在项目中的位置。

这是一个简单的例子:我有一个项目已经使用多年作为其他项目的组件。当核心组件代码更新时更新所有项目真是太痛苦了......每个项目存储库都必须提交新文件(特别是使用SVN)。这些文件必须驻留在特定目录中,以便ColdFusion框架(FW / 1)与代码正确交互。

所以已经做的是核心组件现在在Artifactory中,而gradle.build文件将其拉入项目中。如果它是唯一的依赖项,那将是故事的结束,但还有其他需要被删除,并且代码期望那些与那个组件位于不同的目录中。每个项目都有不同的依赖关系,并且可能有不同的文件结构(例如,我们的旧应用程序正在使用Fusebox框架)。因此,能够控制gradle.build文件中指定的依赖关系的位置是我所追求的。

这是我希望能够做到的:

dependencies {
    // exploded is a configuration that is added to this plugin

    exploded('com.foo:bar:2.0-SNAPSHOT@zip') {
        ext {
            moveWhat = ['app']
            moveWhere = 'assets'
        }
    }
    exploded('com.foo2:bar2:1.0-SNAPSHOT@zip') {
        ext {
            moveWhat = ['*']
            moveWhere = 'lib'
        }
    }
...

希望我可以将目录/文件传递给moveWhat,然后将其放入moveWhere指定的目录中,但是我无法弄清楚如何将属性与每个依赖关系联系起来。我无法弄清楚这是否可能。

有人能指出我正确的方向吗?

1 个答案:

答案 0 :(得分:0)

我建议您使用单独的任务从配置中提取所需内容。像这样:

task copyFromExploded(type: Copy) {
    into new File(project.buildDir, "assets")
    from (configurations.exploded)
    include "**/app"
}