【问题标题】:getClass().getResourceAsStream() in maven projectMaven项目中的getClass().getResourceAsStream()
【发布时间】:2013-02-05 02:55:18
【问题描述】:

我的maven项目的pom.xml如下:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>groupId</groupId>
  <artifactId>artifactId</artifactId>
  <version>0.0.1-SNAPSHOT</version>

  <build>
   <sourceDirectory>src/main/java</sourceDirectory>
   <resources>
    <resource>
     <directory>src/main/resources</directory>
    </resource>
   </resources>
  </build>
</project>

在 src/main/resources 目录中,我有一个名为 test.txt 的文件。 在 src/main/java 目录中,我有一个包含以下行的类:

System.out.println(this.getClass().getResourceAsStream("test"));

当这行代码在 Eclipse 中运行时,我得到输出

java.io.BufferedInputStream@1cd2e5f 

当我将项目导出为 .jar 并运行它时,我会得到输出

 null

我是不是配置有问题?

【问题讨论】:

  • 这个类是单元测试还是真正的生产类?我假设一个生产类。比您必须将 getResourcesAsStream("test") 更改为 getResourcesAsStream("/test");
  • @khmarbaise 你是对的......但为什么它与 eclipse 一起工作???
  • 这个测试资源是在 src/main/resources 文件夹中还是在 src/test/resources 文件夹中,有没有包名?此外,您不需要配置 src/main/javasrc/main/resources 文件夹,因为它们在 maven 中是默认的。

标签: maven resources


【解决方案1】:

&lt;build&gt;&lt;resources&gt; 下确保有&lt;include&gt; 如下 这将明确告诉 maven 获取这些文件并将其包含在构建中。

   <build>
     <resources>
        <resource>
            <directory>${basedir}/src/main/resources</directory>
            <includes>
                <include>**/*</include>
            </includes>
        </resource>
     </resources>
     ...
  </build>

【讨论】:

    【解决方案2】:

    我也遇到了同样的问题。

    当您尝试像这样获取资源时:
    getClass().getResourceAsStream("test")

    您正在尝试查找与该包相关的资源。

    要从src/main/resources 目录中获取资源,您必须在资源名称前添加一个斜杠。
    getClass().getResourceAsStream("/test")

    【讨论】:

    • 哇,我浪费了 2 个小时才发现这一点。谢谢!
    【解决方案3】:

    我遇到了这个错误,但是通过大量的谷歌搜索,我找不到解决方案。 所有的答案都是关于路径的,没人关心它可以在 Eclipse 中运行但不能在导出的 jar 文件中运行:(

    但现在我找到了解决方案,很简单: 在 Eclipse 中右键单击您的 maven 项目-> 属性-> Java 构建路径-> 源选项卡

    你可以看到像这样的树:

    MyProject/src
       Ouput follder..
       Included (**/*.java)
       Excluded
       ...
    

    双击Included (**/*.java),删除现有的,变成Included (All) 现在导出 jar 文件:)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-02-10
      • 2010-11-22
      • 1970-01-01
      • 2014-06-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多