如何从 class.getResource() 释放资源

How to release a resource from class.getResource()

在测试中,我试图测试缺少配置文件时的正确行为。

    given:
    File settingsGradleFile = new File( 'src/main/resources/settings.gradle')
    settingsGradleFile.renameTo 'src/main/resources/settings.gradle_OLD'

    ...

    when: 
    App.instance.start(mockStage)

    // now rename it back to its original name
    // NB in practice I put renameTo() in the "cleanup" block - but I have tested in both
    boolean result = settingsGradleFile.renameTo 'src/main/resources/settings.gradle'
    log.debug("result of rename: $result")

第一个 renameTo 工作正常。第二个 returns false(文件名保持在 "settings.gradle_OLD")。在 CUT 的代码中,我们有:

        URL settingsGradleURL = App.class.getResource( '/settings.gradle' )
        ConfigObject conf = new ConfigSlurper().parse( settingsGradleURL )
        projectName = conf.rootProject.name

我可能错了,但似乎第二个 renameTo 失败了,因为与此同时发生了这个 getResource() 操作。我怎样才能让这个资源成为 "released"?

第二个失败,因为 settingsGradleFile 仍然引用原始名称 "settings.gradle",而不是新名称 "settings.gradle_OLD"

调用 renameTo 不会更新 File 对象,因为 File 对象是不可变的。