首页 > 解决方案 > 如何处理 Gradle 复合构建中的相对路径?

问题描述

我有一个具有以下目录结构的 Gradle 复合构建:

compositebuildroot/
  build.gradle
  settings.gradle
  componentbuild/
    build.gradle
    settings.gradle
    testfile.txt

compositebuildroot/build.gradle_

task runComponentBuildSampleTask {
  dependsOn gradle.includedBuild('componentbuild').task(':sampleTask')
}

,compositebuildroot/settings.gradle包含

rootProject.name = 'compositebuildroot'
includeBuild 'componentbuild'

,compositebuildroot/componentbuild/build.gradle包含

task sampleTask {
  doLast {
    println "System.getProperty(\"user.dir\"): " + System.getProperty("user.dir")
    println new File("testfile.txt").text
  }
}

, 并compositebuildroot/componentbuild/settings.gradle包含

rootProject.name = 'componentbuild'

.

当我gradle sampleTask从目录执行时,我会打印出目录componentbuild的绝对路径,然后是(这是我想要/期望的)的内容。但是,当我从目录执行时,我得到目录的绝对路径,后跟文件的a 。componentbuildtestfile.txtgradle runComponentBuildSampleTaskcompositebuildrootcompositebuildrootjava.io.FileNotFoundExceptiontestfile.txt

我怎样才能gradle runComponentBuildSampleTask从产生compositebuildroot任何输出呢?有没有办法告诉 gradle 运行组件构建任务,就好像当前目录是组件构建的 settings.gradle 文件的目录一样?gradle sampleTaskcomponentbuild

标签: gradle

解决方案


从不使用new File(...)

始终使用file(...)

参见Project.file(Object)


推荐阅读