java - 可执行jar找不到打包资源

标签 java maven

我有以下代码来从资源读取文件:

randomFirstName = rReader.generate(
new FileReader(classLoader.getResource("NamesFem.txt").getFile()));

当我从 IDEA 运行它时,它工作正常。

我需要用maven将项目放入可执行jar中。这是我的组装插件的 pom.xml 配置:

<plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-assembly-plugin</artifactId>
            <executions>
                <execution>
                    <phase>package</phase>
                    <goals>
                        <goal>single</goal>
                    </goals>
                    <configuration>
                        <archive>
                            <manifest>
                                <mainClass>com.myPackage.CreateXlsFile</mainClass>
                            </manifest>
                        </archive>
                        <descriptorRefs>
                            <descriptorRef>jar-with-dependencies</descriptorRef>
                        </descriptorRefs>
                    </configuration>
                </execution>
            </executions>
        </plugin>

当我尝试运行打包的 jar 时,出现以下异常: Thread "main"java.io.FileNotFoundException: Exception in thread "main"java.io.FileNotFoundException: file:/Users/myUser/MyProject/target/my-project-1.0-SNAPSHOT -jar-with-dependency.jar!/NamesFem.txt(没有这样的文件或目录)

当我手动解压 jar 时,所有文件都位于 jar 的根目录中:

enter image description here

出了什么问题?

最佳答案

我猜测问题是 URL.getFile 方法不适用于 JAR 文件内容。当尝试从 JAR 文件中显式读取某些内容时,我总是使用 ClassLoader.getResourceAsStream 来代替。像这样的东西:

randomFirstName = rReader.generate(
    new InputStreamReader(
      classLoader.getResourceAsStream("NamesFem.txt")
    )
);

无论 NamesFem.txt 是在您的 JAR 文件中还是在您的类路径中作为单独的文件(即在您的 IDE 环境中),此都应该工作。

关于java - 可执行jar找不到打包资源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55090282/

相关文章:

java - SWIG C++ 列表到 Java

java - Linux 上有 gradlew 或 gradle 缓存吗?

java - 是否有更有效的使用 EntityManager 的习惯用法?

maven-2 - Maven2解压仅包含内部文件

java - 无法在 jar 中的 Maven 依赖项中找到要 Autowiring 的 bean,

java - 装饰日期格式

java - 将 GWT 模块作为 JavaScript 分发

java - Maven -DforkMode=从不更改用户

java - 按指定顺序运行 Maven 项目的 JUnit 测试

java - 由 : java. lang.NoSuchMethodError : org. springframework.beans.MutablePropertyValues.get(Ljava/lang/String;)Ljava/lang/Object 引起