将单个文件添加到Gradle资源

8
我正在使用Heroku的配置变量插件(详见https://devcenter.heroku.com/articles/config-vars)。
该插件允许我使用.env文件来定义Heroku环境,而我不会将其推送到源代码控制中。
因此,在Heroku上,我可以通过System.properties访问敏感信息。
在开发环境中,我希望能够读取这个文件,所以最好将它放在我的类路径下。
由于.env文件位于我的项目根目录下,因此我无法使用以下方法:
sourceSets {
    main {
        resources {
            srcDirs = ['src/main/resources', '/']
        }
    }
}

什么是将单个文件包含到Gradle资源中的最简单方法?
3个回答

9
之前的回答比我希望的更加复杂,所以我在 gradle 论坛 上提问,并得到了 gradle 核心开发者之一 Sterling Green 的回复。
他建议直接配置 processResources
processResources {
   from(".env") 
}

他还提到,将项目根目录直接作为输入可能不是一个好主意。

5

将之前的答案与其他网站的提示合并后,我得出了以下解决方案:

sourceSets {
  specRes {
    resources {
      srcDir 'extra-dir'
      include 'extrafiles/or-just-one-file.*'
    }
  }
  main.resources {
    srcDir 'src/standard/resources'
    srcDir specRes.resources
  }
}
processResources {
  rename 'some.file', 'META-INF/possible-way-to-rename.txt'
}

我仍然在想是否有更好的方法。


1
这样做的副作用是还会添加一个新的 specResClasses 任务,这可能不是预期的结果。我在 Gradle 论坛上重复了这个问题,看看那里是否有更好的方法:https://discuss.gradle.org/t/how-to-add-a-single-extra-resource-to-the-existing-resources/17070 - whaleberg

2
我最终做的是将项目根目录添加为资源文件夹,只包含我感兴趣的文件:
sourceSets.main.resources { srcDir file('.') include '.env' }

看起来这样做就可以了。但我想知道是否这是最优解。


如果我有多个目录,例如 A,B,C,对于目录 C,我只需要 C/my.properties,但对于 AB,我需要所有文件。 - mahengyang
如果您想在JAR文件内部为其指定另一个名称,该怎么办? - Janus Troelsen
4
此解决方案可行,但(如上所述),“include”模式将用于所有srcDirs,而不仅仅是一个。我想知道如何将一个文件添加到现有的srcDirs中。 - Marwin

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接