![](/img/trans.png)
[英]Maven corrupting binary files in src/main/resources when building jar
[英]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 / classes或target / 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.