有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java包含json文件并将其读入生成的maven中。jar文件

我使用maven-assembly-plugin命令行生成一个包含所有依赖项的jar文件:

mvn clean compile assembly:single

它将目录src/main/java/中的所有.java文件编译为target/中的.jar文件

我的src/main/java/目录中有一个类,它使用以下代码读取位于他旁边的.json文件:

File file = new File("src/main/java/path/to/test.json");
content = FileUtils.readFileToString(file, "UTF-8");

因此,我需要在生成的.jar中访问这个.json文件

我使用<build>中的此配置在maven中包含此.json

<resources>
    <resource>
        <directory>src/main/java</directory>
        <includes>
            <include>src/main/java/path/to/test.json</include>
        </includes>
    </resource>
</resources>

所有东西都编译成功,当我尝试使用java -jar ./target/my-jar-file.jar运行target/目录中的.jar文件时,效果非常好

问题是,现在我希望能够将我的.jar文件移动到任何我想要的地方。但当我在另一个地方执行它时,会收到错误消息:

java.io.FileNotFoundException: File 'src/main/java/path/to/test.json' does not exist

因此显然.json文件没有包含在我生成的.jar

有人知道我错过了什么吗


共 (2) 个答案

  1. # 2 楼答案

    尝试提取测试数据。json文件从jar到当前项目中使用maven插件的resources文件夹,请重试

     Java Code changes : -
     File file = new File("src/main/resources/test.json");
     content = FileUtils.readFileToString(file, "UTF-8");
    
    pom.xml changes :- 
    <build>
            <plugins>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-dependency-plugin</artifactId>
                    <version>3.1.1</version>
                    <executions>
                        <execution>
                            <id>unpack-jar-file</id>
                            <phase>package</phase>
                            <goals>
                                <goal>copy</goal>
                            </goals>
                            <configuration>
                                <artifactItems>
                                    <artifactItem>
                                        <groupId>groupID</groupId>
                                        <artifactId>artifactId</artifactId>
                                        <version>version</version>
                                        <type>jar</type>
                                        <overWrite>true</overWrite>
                                   <outputDirectory>${project.basedir}/src/main/resources</outputDirectory>
                                        <includes>**/*.json</includes>
                                    </artifactItem>
                                </artifactItems>
                            </configuration>
                        </execution>
                    </executions>
                </plugin>
            </plugins>
        </build
    

    注意:如果jar存在于本地存储库而不是任何中央存储库中,请使用下面的标记

    ${project.build.directory}/localrepo