【问题标题】:Eclipse resources folder with git & Maven带有 git 和 Maven 的 Eclipse 资源文件夹
【发布时间】:2016-01-05 20:02:12
【问题描述】:

我在 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 提出建议后,我改变了我的项目,现在它看起来像这样:
但我仍然收到 NullPointerException

System.setProperty("org.hyperic.sigar.path",this.getClass().getResource("Sigar_lib/libsigar-amd64-linux.so").getPath());

【问题讨论】:

  • 您需要加载本机 dll 以与 sigar 一起使用吗?
  • @Stefan,我需要为 sigar 加载 *.so 文件。我设法添加了一个静态文件,但我需要它是可移植的,所以必须访问完整的文件列表
  • 您尝试构建的是 Web 应用程序还是 jar 库?
  • @Stefan 一个 jar,它将用作我拥有的其他应用程序的库

标签: java eclipse


【解决方案1】:

这与 git 完全无关,而是与您的项目结构有关。确实它不遵循Maven standard directory layout

  • 你的java类应该在src/main/java
  • 你的资源文件应该是in src/main/resources

所以你有两个选择:

  • 更正您的设置,然后重试。
  • 在您的 pom 中配置 Maven,以便在 lib / lib2 中查找资源。

在这两种情况下,您都会在正确的位置寻找资源。 IE。 file.xxx 将位于file.xxx 而不是src/main/resources/file.xxx(一旦定义了资源目录,就可以在该目录中搜索资源)

根据您的 cmets,您真的应该阅读这篇解释 how to use Maven within Eclipse 的帖子。当您计划处理 Maven 项目时,请在 Eclipse 中创建 Maven project,而不是 Java 项目。

【讨论】:

  • 但默认情况下该布局是从 Eclipse 创建的。 Eclipse 不使用标准布局,我应该自己更改它!?这很奇怪。我应该只在 src 下创建文件夹,对吧?会试试看
  • 如果你创建一个 maven 项目,eclipse 不会创建这个布局...如果你打算在 Maven 项目上工作,我希望你已经在 Eclipse 中创建了一个 Maven 项目。
  • 我创建了一个 java 项目,然后在 Eclipse 中将其更改为 Maven,这是默认布局。我试图纠正我的布局,我在 src/ 下添加了两个丢失的文件夹,但现在我的项目包从 elod.msg 更改为 main.java.elod.msg。这是正常的吗,我更喜欢它原来的样子。
  • 查看我的最后编辑并阅读这篇文章:vogella.com/tutorials/EclipseMaven/article.html
【解决方案2】:

行:

System.setProperty("org.hyperic.sigar.path",this.getClass().getResource("Sigar_lib/libsigar-amd64-linux.so").getPath());

总是失败,因为打包Jar的时候,“Sigar_lib”目录会位于classpath的根目录,所以把路径改成:

"/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>

【讨论】:

  • 对库使用 maven 依赖会很棒!但我仍然像你一样让 NPE 上线
  • pom 文件和你的一样。但我仍然得到一个 NPE
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-12-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-03-19
相关资源
最近更新 更多