Groovy 如何动态编写依赖项列表

Groovy 如何动态编写依赖项列表,groovy,gradle,Groovy,Gradle,我偶尔会从第三方获得代码,作为JAR的zip文件,我需要将其用作依赖项。 我想将JAR解压到flatDir存储库中,并自动更新dependencies.gradle文件。我可以很好地完成解压,写入文件是一件棘手的事情 让我们给出一个使用开源库的示例: 如果dependencies.gradle最初是这样的: repositories { flatDir { dirs 'lib' } } dependencies { compile 'commons-codec

我偶尔会从第三方获得代码,作为JAR的zip文件,我需要将其用作依赖项。 我想将JAR解压到flatDir存储库中,并自动更新dependencies.gradle文件。我可以很好地完成解压,写入文件是一件棘手的事情

让我们给出一个使用开源库的示例:

如果dependencies.gradle最初是这样的:

repositories {
    flatDir {
        dirs 'lib'
    }
}
dependencies {
  compile 'commons-codec:1.2'
  compile 'commons-logging:1.2'
  compile 'log4j:1.2.17'
}
然后一个包含commons-codec-1.10.jar、commons-logging-1.2.jar和guava-18.0.jar的Zip文件到达。dependencies.gradle必须更新为:

repositories {
    flatDir {
        dirs 'lib'
    }
}
dependencies {
  compile 'commons-codec:1.10'
  compile 'commons-logging:1.2'
  compile 'log4j:1.2.17'
  compile 'guava:18.0'
}

我希望有特定的版本,而不仅仅是整个flatDir的全局版本,因为在flatDir中可能有相同库的不同版本

我无法使用常规筛选,因为@符号不在文件中

挑战在于识别依赖项何时已经存在且需要更新,何时依赖项已经存在且不需要更新,何时依赖项不存在且需要添加


我使用一个带有zipTree的复制任务来解压,所以我的想法是使用带有闭包的每个文件来完成这项工作。但是,我不太清楚如何执行上面段落中概述的步骤。

“flatDir中可能有相同库的不同版本”——为什么?代码删除ZIP是否包含同一库的多个版本?