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

4

我有一个Spring Web应用程序,它是作为maven构件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中,我尝试使用以下代码读取文件: File f = new ClassPathResource("test.txt").getFile();

但是我遇到了java.io.FileNotFoundException: class path resource [test.txt] cannot be resolved to absolute file path because it does not reside in the file system: jar:B.jar!/test.txt的错误。 我还尝试了以下代码: File f = new File(getClass().getResource("test.txt").toURI());

能否请有人帮忙解决这个问题?


你看过这个问题了吗?从JAR获取文件 - Ariel Valentin
那篇帖子基本上说这是不可能的,因为它驻留在另一个jar包中。 - kaputabo
2个回答

6

我最终通过按照链接中提到的另一种方法得以实现。

基本上,在Artifact A的pom文件中,我使用了Maven依赖插件和拆包目标。使用这个插件,我解压了Artifact B并将test.txt复制到Project A的target/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>

在构建Artifact A时,将创建war文件A.war,并且test.txt出现在已解压的war文件的WEB-INF/classes目录中,因此它位于类路径中。

-1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接