从Java访问gradle资源

ejk8hzay  于 2022-11-24  发布在  Java
关注(0)|答案(4)|浏览(187)

我有一个基于gradle的java项目,该项目具有以下结构

.
├── myproject
│      ├── src
│      |    └── main
│      |         ├── java
│      |         └── resources
│      |               └── myresource.xml
|      ├── build
|      |     ├── classes
|      |     |    └── main
│      |     |         └── myresource.xml
|      |     ├── resources

我尝试使用ClassLoader访问 resources 文件夹中的一些文件,如下所示

ClassLoader.getSystemClassLoader().getResoure("/myresource.xml");

但找不到该文件。
我找到的访问这些文件的唯一方法是浏览项目的已知结构

Path resourcesPath= FileSystems.getDefault().getPath(System.getProperty("user.dir"), "/src/main/resources/");

知道我做错了什么吗?

1l5u6lss

1l5u6lss1#

好吧,我的困难似乎来自另一个问题(资源没有被复制到正确的位置)。一旦我解决了这个问题,ClassLoader就能够使用以下两种形式之一找到我的资源:

ClassLoader.getSystemClassLoader().getResource("./myresource.xml");

ClassLoader.getSystemClassLoader().getResource("myresource.xml");

**编辑:**当使用嵌入在其他应用程序中的jar时,前一种解决方案不起作用,在这种情况下使用此解决方案:

Thread.currentThread().getContextClassLoader().getResource("myresource.xml")
hs1rzwqc

hs1rzwqc2#

http://docs.oracle.com/javase/7/docs/api/java/lang/Class.html#getResource(java.lang.String)
例如类似MyMain.class.getResource("/config.txt")的内容,或者在适当的时候使用相对路径。

unftdfkk

unftdfkk3#

也许你应该这样使用它:

Thread.currentThread().getContextClassLoader().getResource("myresource.xml")

如果我使用ClassLoader.getSystemClassLoader().getResource("myresource.xml")
当我将其作为嵌入其他应用程序的jar包使用时,我仍然无法访问资源。

sqxo8psd

sqxo8psd4#

在Groovy中使用Gradle访问build.gradle中的Java资源的另一种解决方案是读取Java资源中的VERSION文件:

static String getVersion(File rootFile)  {
    File versionFile = new File(rootFile, "src/main/resources/VERSION")
    byte[] versionBytes = Files.readAllBytes(versionFile.toPath())
    String version = new String(versionBytes, StandardCharsets.UTF_8).trim()
    version
}

version = getVersion(project.projectDir)

它避免了对ClassLoader的操作。

  • 注意:sourceSets.main.output.resourcesDir在任务函数中尚不存在。*

相关问题