Gradle多模块构建中打印配置文件无输出问题求助
问题分析与解决
1. 变量名错误
你的代码遍历allArtifacts时,循环变量定义为art,但打印语句里用了未定义的file变量,这会导致输出空值。修正第一个循环的打印逻辑:
// 根项目任务修正 project(":some-module").configurations.myconfig.allArtifacts.each { art -> println "Artifact: " + art // 将file替换为art } // 子模块任务修正 configurations.myconfig.allArtifacts.each { art -> println "Artifact: " + art // 将file替换为art }
2. 获取文件的方式错误
allArtifacts.getFiles()不是Gradle的正确调用方式:
- 若要获取单个
Artifact对应的文件,使用art.file - 若要获取整个配置的所有文件,直接调用
configurations.myconfig.files
同时,Gradle配置是懒加载的,若未触发解析,配置内容可能为空,可显式调用resolve()强制解析:
// 根项目任务中获取文件的正确写法 println "From root, printing files" def config = project(":some-module").configurations.myconfig config.resolve() // 显式解析配置 config.files.each { file -> println "File: " + file } // 子模块任务同理 println "From module, printing files" def config = configurations.myconfig config.resolve() config.files.each { file -> println "File: " + file }
3. 确保配置被触发解析
如果myconfig配置未被其他任务(比如编译、打包任务)使用,即使在doLast中访问,也可能没有内容。可以:
- 让打印任务依赖于使用
myconfig的任务(比如dependsOn tasks.compileMyCode) - 在任务中显式调用
config.resolve()(如上例所示)
修正后的完整代码
根项目任务
task printFilesRoot { dependsOn 'build' doLast { def moduleProject = project(":some-module") def config = moduleProject.configurations.myconfig config.resolve() println "From root, printing artifacts" config.allArtifacts.each { art -> println "Artifact: " + art println "Artifact file: " + art.file } println "From root, printing files" config.files.each { file -> println "File: " + file } } }
子模块任务
task printFilesModule { doLast { def config = configurations.myconfig config.resolve() println "From module, printing artifacts" config.allArtifacts.each { art -> println "Artifact: " + art println "Artifact file: " + art.file } println "From module, printing files" config.files.each { file -> println "File: " + file } } }
另外,Gradle内置的dependencies任务也能快速查看配置的依赖与文件:
./gradlew :some-module:dependencies --configuration myconfig
内容的提问来源于stack exchange,提问作者Hedley
相关产品推荐
相关产品推荐

