Как я могу получить доступ к ресурсам из зависимостей? У меня примерно так:
Обертка проекта build.gradle
..
dependencies {
compile com.company:mysubproject1:2.0.1
compile com.company:mysubproject2:2.0.1
..
У этих подпроектов есть файлы в ИХ каталогах ресурсов, например. SRC / основные / ресурсы / Liquibase / changelog.xml
Этих подпроектов может быть n, и мне нужно, чтобы моя задача gradle пройти через все зависимости и получить все файлы changelog.xml и создать из них новый файл, который будет использоваться позже.




На самом деле это было не так уж и сложно:
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'.
Возможная проблема была бы в том, что если бы у двух зависимостей был файл с одинаковым именем и путем, я не знаю, что было бы в пути к классам в этом случае.