Gradle依赖资源访问

时间:2018-07-30 12:47:19

标签: java gradle

如何从依赖项访问资源?我有这样的东西:

包装项目build.gradle

..
dependencies {
  compile com.company:mysubproject1:2.0.1
  compile com.company:mysubproject2:2.0.1
..

这些子项目在其资源目录中有一些文件,例如src / main / resources / liquibase / changelog.xml

这些子项目中可以有n个,我需要我的gradle任务来 遍历所有依赖项并获取所有changelog.xml文件,并从中创建新文件,以供以后使用。

1 个答案:

答案 0 :(得分:0)

实际上并不难:

doFirst {
        println 'Generating master changelog...'
        def changelogFiles = []
        configurations.runtime.each {
            def zip = new ZipFile(it)
            def entries = zip.entries()
            entries.findAll { entry -> entry.name.contains("liquibase") }
                    .findAll { entry -> entry =~ /changelog.xml/ }
                    .each { entry ->
                changelogFiles.add(((ZipEntry) entry).name)
            }

        }

        def resDir = sourceSets.main.output.resourcesDir.path + '/liquibase'

        def changelogFile = new File("$resDir/changelog-master.xml")

        changelogFile.write("<databaseChangeLog xmlns=\"http://www.liquibase.org/xml/ns/dbchangelog\"\n" +
                "                   xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n" +
                "                   xsi:schemaLocation=\"http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-2.0.xsd\">\n\n")

        changelogFiles.each {
            println("Including $it to changelog.")
            changelogFile << "    <include file=\"classpath:$it\"/> \n"
        }

        changelogFile << "\n</databaseChangeLog>"

    }

此代码仅循环遍历依赖关系,并为名为“ changelog.xml”且路径中具有“ liquibase”的文件挖掘文件路径。

可能的问题是,如果2个依赖项具有相同名称和路径的文件,那么我不知道在这种情况下classpath会是什么。