繁体   English   中英

使用maven构建后找不到来自src / main / resources的资源

[英]Resource from src/main/resources not found after building with maven

您好,我在Java应用程序中使用的是src / main / resources中的配置文件。 我在我的课堂上这样阅读:

new BufferedReader(new FileReader(new File("src/main/resources/config.txt")));

所以现在我要使用mvn assembly:assembly用maven构建它。 这是我的pom.xml中的内容:

<plugin>
                <artifactId>maven-assembly-plugin</artifactId>
                <version>2.3</version>
                <configuration>
                    <finalName>TestSuite</finalName>
                    <descriptorRefs>
                        <descriptorRef>jar-with-dependencies</descriptorRef>
                    </descriptorRefs>
                    <archive>
                        <manifest>
                            <addClasspath>true</addClasspath>
                            <mainClass>com.some.package.Test</mainClass>
                        </manifest>
                    </archive>
                </configuration>
            </plugin>

因此,当我运行我的应用程序时,出现此错误:

src\main\resources\config.txt (The system cannot find the path specified)

但是,当我右键单击组装好的罐子时,我可以在里面看到它,有人知道我做错了吗?

来自src/main/resources将放入类路径的根目录,因此您需要以以下方式获取资源:

new BufferedReader(new InputStreamReader(getClass().getResourceAsStream("/config.txt")));

您可以通过查看maven生成的JAR / WAR文件来进行验证,因为您会在档案的根目录中找到config.txt

FileReader从文件系统上的文件读取。

也许您打算使用类似的方法从类路径加载文件

// this will look in src/main/resources before building and myjar.jar! after building.
InputStream is = MyClass.class.getClassloader()
                     .getResourceAsStream("config.txt");

或者,您可以在读取文件之前从jar中提取文件。

您在src / main / resources中放入的资源将在构建过程中复制到目标/类,可以使用以下方式访问:

...this.getClass().getResourceAsStream("/config.txt");

一旦构建完毕,jar就会在类路径中的BOOT-INF / classestarget / classes文件夹下拥有资源文件,请使用以下方法,并将文件在src / main / resources下作为方法调用getAbsolutePath(“ certs /uat_staging_private.ppk“) ,即使我们可以将此方法放置在Utility类中,调用线程实例也将被加载以加载ClassLoader以从类路径获取资源。

 public String getAbsolutePath(String fileName) throws IOException {
      return Thread.currentThread().getContextClassLoader().getResource(fileName).getFile();
  }

在此处输入图片说明 在此处输入图片说明

我们可以在pom.xml中的标签中添加以下标签,以包含这些资源文件来构建target / classes文件夹

<resources>
        <resource>
            <directory>src/main/resources</directory>
            <includes>
                <include>**/*.properties</include>
                <include>**/*.ppk</include>
            </includes>
        </resource>
</resources>

我认为汇编插件会将文件放在类路径上。 JAR中的位置将不同于磁盘上的位置。 解压缩生成的JAR并查看文件在此处的位置。

您可以直接通过classpath:替换src/main/resources/ classpath:

因此,对于您的示例,您将替换以下行:

new BufferedReader(new FileReader(new File("src/main/resources/config.txt")));

通过此行:

new BufferedReader(new FileReader(new File("classpath:config.txt")));

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM