java—使gradle在其项目之外访问文件

snvhrwxg  于 2021-08-20  发布在  Java
关注(0)|答案(2)|浏览(530)

我有一个gradle项目,在其代码中的某个点上,它需要在gradle项目之上一个级别的文件夹上执行操作。它需要在其中写入一些数据,如果不存在,则创建一个文件。然而,行为是代码的责任,gradle所做的就是有一个任务来运行代码。
问题是,当我运行gradle任务时,jvm抛出 java.nio.File NoSuchFileException .
从intellij的run运行同一个程序时,它的执行完全符合预期,因此它不是代码。
我看到的一个很大的区别是intellij跑步有一个 Working directory 设置为高于我的kotlin项目的级别,而gradle将项目作为根指向,这是应该的。
我是gradle的新手,我发现文档很难阅读,这让我很困惑。我假设我需要告诉gradle,代码可能需要访问项目外部文件系统上的文件夹。然而,我不确定这是否需要在未来 settings.gradle.kt 或者在任务级别上,通过与哪个函数一起使用。
你能给我指一下正确的路吗?

cwxwcias

cwxwcias1#

要在相对路径中创建文件集合,此代码段可能适用于您:

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

jmo0nnb3

jmo0nnb32#

正如我在前面的评论中提到的,问题实际上归结为能够更改自定义gradle任务的工作目录。
在一项任务中,我完成了以下工作:

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

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

相关问题