我有一个基于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/");
知道我做错了什么吗?
4条答案
按热度按时间1l5u6lss1#
好吧,我的困难似乎来自另一个问题(资源没有被复制到正确的位置)。一旦我解决了这个问题,ClassLoader就能够使用以下两种形式之一找到我的资源:
**编辑:**当使用嵌入在其他应用程序中的jar时,前一种解决方案不起作用,在这种情况下使用此解决方案:
hs1rzwqc2#
http://docs.oracle.com/javase/7/docs/api/java/lang/Class.html#getResource(java.lang.String)
例如类似
MyMain.class.getResource("/config.txt")
的内容,或者在适当的时候使用相对路径。unftdfkk3#
也许你应该这样使用它:
如果我使用
ClassLoader.getSystemClassLoader().getResource("myresource.xml")
当我将其作为嵌入其他应用程序的jar包使用时,我仍然无法访问资源。
sqxo8psd4#
在Groovy中使用Gradle访问
build.gradle
中的Java资源的另一种解决方案是读取Java资源中的VERSION
文件:它避免了对
ClassLoader
的操作。sourceSets.main.output.resourcesDir
在任务函数中尚不存在。*