Maven从依赖jar src / main / resources加载文件

时间:2015-03-06 04:26:38

标签: spring maven

我有一个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());

有人可以帮忙吗?

2 个答案:

答案 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/

中解释了这一点