java - 读取 jar 依赖中的资源文件

标签 java maven jar resources dependencies

在我解释我的问题之前 - 我已经尝试在已经提出的问题中找到解决方案,但没有一个有效 ;)

我正在尝试读取 jar 中的文件,这是另一个项目的依赖项。此文件位于路径下

/src/main/resources/driver

项目打包成jar文件。来自资源的驱动程序使用 pom 包含到 jar 中:

    <resources>
        <resource>
            <directory>src/main/resources</directory>
            <includes>
                <include>*</include>
            </includes>
        </resource>
    </resources>

此外,当我解压 jar 时,我可以看到它已添加到 jar 的根目录中。

我需要做的是将此文件从 jar 内部复制到磁盘上的目录中。一切正常,只要通过 IntelliJ 添加项目作为依赖项目即可。当我将它添加为 POM 中的依赖项时,我得到一个 NullPointerException。

我用来加载此文件的代码如下所示:

String sourceFilePath = this.getClass().getClassLoader().getResource(driverFileName).getPath();

我也尝试了不同的方法:

    String sourceFilePath = this.getClass().getResource("driver").getPath();
    String sourceFilePath = this.getClass().getResource("/driver").getPath();
    String sourceFilePath = this.getClass().getClassLoader().getResource("driver").getPath();
    String sourceFilePath = this.getClass().getClassLoader().getResource("/driver").getPath();

但每次尝试都以相同的结果结束:调用 getPath() 时出现 NullPointerException。

我需要解决方案,因为作为依赖项附加的项目是 UI 测试的框架。到目前为止,我一直在为每个需要它们的新项目添加驱动程序,但这需要时间,让想要使用这个框架的人更加复杂,并且在发布新版本的驱动程序时会带来很多麻烦。我希望能够简单地为该框架添加一个 Maven 依赖项,并能够使用该框架内部的驱动程序。 这里的问题是我需要设置一个带有该驱动程序路径的系统变量。因此,一旦需要驱动程序,我就会尝试将其(代码在框架内)复制到外部位置(某个 tmp 目录)。

知道怎么解决吗?

最佳答案

像这样使用目标 jar 类加载器

ClassInOtherJar.class.getClassLoader().getResourceAsStream("filename.xml") 

关于java - 读取 jar 依赖中的资源文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43799245/

相关文章:

android - 找不到与 org.robolectric :robolectric:2. 3.+ 匹配的任何版本

java - 如何从 jar 文件内存流中加载类

grails - 有什么办法可以反编译grails/groovy jar文件?

java - JSmooth Java 1.4 或更高版本未找到错误

Java 和 .NET : Base64 conversion confusion

java - 未找到 Spring Dispatcher Servlet 问题

java - JTable 为 "Checkbox editor"

java - 在点击时使用 fragment 进行卡片 View 时, Activity Intent 不起作用

java - 使用 Maven 插件生成 Protocol Buffer 会导致版本错误

java - Eclipse 忽略 failOnMissingWebXml 用户属性