您好我在我的java应用程序中使用src / main / resources中的配置文件。我正在我的课堂上读它:
new BufferedReader(new FileReader(new File("src/main/resources/config.txt")));
所以现在我正在用maven使用mvn assembly:assembly
来构建它。以下是我的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)
但是当我右键点击我装配好的罐子时,我可以看到里面有人知道我做错了什么?
答案 0 :(得分:79)
来自src/main/resources
的资源将被放到类路径的根目录中,因此您需要获取资源:
new BufferedReader(new InputStreamReader(getClass().getResourceAsStream("/config.txt")));
您可以通过查看maven生成的JAR / WAR文件进行验证,因为您会在归档的根目录中找到config.txt
。
答案 1 :(得分:11)
FileReader从文件系统上的文件中读取。
也许您打算使用类似的东西从类路径加载文件
// this will look in src/main/resources before building and myjar.jar! after building.
InputStream is = MyClass.class.getClassloader()
.getResourceAsStream("config.txt");
或者你可以在阅读之前从jar中提取文件。
答案 2 :(得分:5)
您在src / main / resources中放置的资源将在构建过程中复制到目标/类,可以使用以下方法访问:
...this.getClass().getResourceAsStream("/config.txt");
答案 3 :(得分:1)
我认为程序集插件将文件放在类路径上。 JAR中的位置与您在磁盘上看到的位置不同。解压缩生成的JAR并查看文件所在的位置。
答案 4 :(得分:0)
您可以直接用src/main/resources/
替换classpath:
因此对于您的示例,您将替换以下行:
new BufferedReader(new FileReader(new File("src/main/resources/config.txt")));
通过此行:
new BufferedReader(new FileReader(new File("classpath:config.txt")));
答案 5 :(得分:0)
构建完jar后,将在类路径中的 BOOT-INF / classes 或 target / classes 文件夹下拥有资源文件,请使用以下方法将文件作为方法调用 getAbsolutePath(“ certs / uat_staging_private.ppk”) 传递到 src / main / resources 下,即使我们可以放置此文件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>