我有一个Spring Web应用程序,它是作为maven artifact A.war创建的。它具有与工件B.jar的maven依赖关系。 工件B的src / main / resources有一个文件test.txt。我想从工件A.war中读取文件test.txt。 当我爆炸B.jar时,我看到test.txt位于jar的根目录中。 B.jar最终出现在爆炸的A.war的WEB-INF / lib中 在A中,我尝试使用读取文件 文件f =新的ClassPathResource(" test.txt")。getFile();
我收到java.io.FileNotFoundException:类路径资源[test.txt]无法解析为绝对文件路径,因为它不驻留在文件系统中:jar:B.jar!/ test.txt。 我也试过了 文件f =新文件(getClass()。getResource(" test.txt")。toURI());
有人可以帮忙吗?
答案 0 :(得分:3)
我终于按照其中提到的备用路径开始工作了 link
基本上在Artifact A的pom文件中,我使用了maven依赖插件并解压缩了目标。使用它,我解压缩工件B并将test.txt复制到项目A的目标/ classes目录。
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<executions>
<execution>
<id>unpack</id>
<phase>generate-sources</phase>
<goals>
<goal>unpack</goal>
</goals>
<configuration>
<artifactItems>
<artifactItem>
<groupId>com.me</groupId>
<artifactId>artifactB</artifactId>
<version>1.0-SNAPSHOT</version>
<outputDirectory>${basedir}/target/classes</outputDirectory>
<includes>*.txt,*.xml</includes>
</artifactItem>
</artifactItems>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
在构建工件A时,将创建war文件A.war,并且test.txt将出现在爆炸的war文件的WEB-INF / classes目录中,因此它位于类路径中。
答案 1 :(得分:0)
您必须为类路径资源构建一个自己的类加载器,以便从jar中读取文件。
我在博文(https://skmit.wordpress.com/2012/02/29/read-classpath-resource-from-jar-files-with-spring/)
中解释了这一点