我在Eclipse上有一个git / Maven(如果这与它有关)项目。我需要添加一个库文件夹,其中将存储我需要的一些文件。这是我项目的树形结构。
我尝试加载文件夹lib和lib2下的文件,但没有成功。我的一些尝试是
System.out.println("PATH"+this.getClass().getResource("lib").getPath());
System.setProperty("org.hyperic.sigar.path",this.getClass().getResource("lib2/file.xxx"));
他们都给我一个NullPointerException 我知道那里已经有很多答案了,我想我已经尝试了所有这些,大多数情况下,这只是没有用。
修改
在Kraal建议之后我改变了我的项目,现在它看起来像这样:
但我仍然在
System.setProperty("org.hyperic.sigar.path",this.getClass().getResource("Sigar_lib/libsigar-amd64-linux.so").getPath());
答案 0 :(得分:1)
这与git完全无关,而与你项目的结构无关。实际上它并不遵循Maven standard directory layout。
src/main/java
in src/main/resources
所以你有两个选择:
lib
/ lib2
中查找资源。在这两种情况下,您都可以在正确的位置查找资源。即file.xxx
将位于file.xxx
而不是src/main/resources/file.xxx
(一旦您定义了资源目录,就可以在此目录中搜索资源)
根据您的评论,您应该阅读这篇解释how to use Maven within Eclipse的帖子。当您计划处理Maven项目时,在Eclipse中创建Maven project
,而不是Java项目。
答案 1 :(得分:0)
该行:
System.setProperty("org.hyperic.sigar.path",this.getClass().getResource("Sigar_lib/libsigar-amd64-linux.so").getPath());
总是失败,因为当打包Jar时,目录“Sigar_lib”将位于类路径的根目录,因此将路径更改为:
"/Sigar_lib/libsigar-amd64-linux.so"
(领先斜线)。
但是这也会失败,因为无法从jar中加载本机库。您可以选择将文件放入外部目录或将其添加到jar的类路径中,并在加载时将它们解压缩到临时目录。
将库与Maven集成的最佳方法是将它们作为依赖项添加,请参阅here并删除“lib”,“lib2”文件夹。
在运行时,可以像这样访问文件:
System.out.println("PATH: " + System.class.getResource("/sigar-1.6.4/libsigar-amd64-linux.so").getPath());
<强>更新强>
pom.xml应该有这些行:
<!-- SIGAR -->
<!-- Java library -->
<dependency>
<groupId>org.fusesource</groupId>
<artifactId>sigar</artifactId>
<version>1.6.4</version>
</dependency>
<!-- Native libraries -->
<dependency>
<groupId>org.gridkit.lab</groupId>
<artifactId>sigar-lib</artifactId>
<version>1.6.4</version>
</dependency>
</dependencies>