maven项目中的getClass()。getResourceAsStream()

时间:2013-02-05 02:55:19

标签: maven resources

我的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的文件。 在src / main / java目录中,我有一个包含以下行的类:

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

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

java.io.BufferedInputStream@1cd2e5f 

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

 null

我配置错了吗?

3 个答案:

答案 0 :(得分:10)

<build><resources>下,请确保拥有<include>,如下所示 这将明确告诉maven获取这些文件并将其包含在构建中。

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

答案 1 :(得分:4)

我正面临着同样的问题。

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

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

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

答案 2 :(得分:2)

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

但现在我找到了解决方案,这么简单: 在Eclipse中右键单击你的maven项目 - &gt;属性 - &gt; Java构建路径 - &gt;来源标签

您可以看到如下树:

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

双击Included (**/*.java),删除现有版本,使其成为Included (All) 现在导出jar文件:)