【问题标题】:Making Gradle access files outside its project让 Gradle 访问其项目之外的文件
【发布时间】:2021-09-15 14:41:57
【问题描述】:

我有一个 Gradle 项目,在其代码中的某个时间点需要对 Gradle 项目上一层的文件夹执行操作。它需要在其中写入一些数据,如果不存在则创建一个文件。但是,代理是代码的责任,Gradle 所做的只是有一个任务来运行代码。

问题是当我运行 gradle 任务时,jvm 会抛出一个java.nio.File NoSuchFileException

从 Intellij 的 Run 中运行相同的程序完全按预期执行,所以它不是代码。

我看到的一个重大区别是 Intellij Run 将Working directory 设置在我的 Kotlin 项目之上的级别,而 Gradle 将项目作为 root 指向,这是应该的。

我是 Gradle 新手,我发现文档很难阅读,这让我很困惑。我假设我需要以某种方式告诉 Gradle 代码可能需要访问项目外部文件系统上的文件夹。但是,我不确定是否需要在 settings.gradle.kt 或任务级别以及使用哪个函数。

你能指点我的路吗?

【问题讨论】:

    标签: java kotlin gradle build


    【解决方案1】:

    要在相对路径中创建文件集合,此 sn-p 可能适合您:

    tasks.register('list') {
        doLast {
            File srcDir
            
            // Create a file collection using a closure
            collection = layout.files { srcDir.listFiles() }
    
            srcDir= file("../$rootDir")
            println "Contents of $srcDir.name"
            collection.collect { relativePath(it) }.sort().each { println it }
        }
    }
    

    参考网站: https://docs.gradle.org/current/userguide/working_with_files.html#sec:file_collections

    【讨论】:

    • 您好,感谢您的回答!不幸的是,我后来意识到这个问题具体归结为能够更改自定义 gradle 任务的工作目录。尽管我想出了一个 1-iner,但这是对我有帮助的话题。 stackoverflow.com/questions/60798844/…
    【解决方案2】:

    正如我之前的评论中提到的,问题实际上归结为能够更改自定义 Gradle 任务的工作目录。

    在一项任务中,我最终做了以下事情:

    run.configure {
       workingDir = File("./..")
    }
    

    这将使给定任务的工作目录的范围成为解决问题的父目录之一。

    【讨论】:

      猜你喜欢
      • 2012-03-27
      • 1970-01-01
      • 2018-06-01
      • 1970-01-01
      • 1970-01-01
      • 2014-03-27
      • 1970-01-01
      • 2017-10-29
      • 1970-01-01
      相关资源
      最近更新 更多