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

han*_*nsi 17 resources maven

我的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>
Run Code Online (Sandbox Code Playgroud)

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

System.out.println(this.getClass().getResourceAsStream("test"));
Run Code Online (Sandbox Code Playgroud)

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

java.io.BufferedInputStream@1cd2e5f 
Run Code Online (Sandbox Code Playgroud)

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

 null
Run Code Online (Sandbox Code Playgroud)

我配置错了吗?

Mil*_*d J 13

<build><resources>确保有<include>如下这将明确地告诉Maven来获取这些文件,它包含在构建中.

   <build>
     <resources>
        <resource>
            <directory>${basedir}/src/main/resources</directory>
            <includes>
                <include>**/*</include>
            </includes>
        </resource>
     </resources>
     ...
  </build>
Run Code Online (Sandbox Code Playgroud)


Rit*_*ito 7

我正面临着同样的问题。

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

您正在尝试查找相对于该软件包的资源。

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


yel*_*ver 3

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

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

你可以看到一棵像这样的树:

MyProject/src
   Ouput follder..
   Included (**/*.java)
   Excluded
   ...
Run Code Online (Sandbox Code Playgroud)

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