java - 使用 Maven ClassLoader.getSystemClassLoader().getResource() 返回 null

标签 java maven-plugin jbehave

我的项目目录结构(在 Eclipse 中):

MyProject/
    src/main/Java
    src/main/resources  
        stories
            file.story

在主类中,我在下面的行中返回,通过 MAVEN 执行主类时返回 null

String folderName = "stories";
URL appURL = ClassLoader.getSystemClassLoader().getResource(folderName);

通过maven执行时,appURL返回NULL。

通过阅读 Stackoverflow 上的一篇文章,我了解到,我正在服务器上运行 Web 应用程序,但没有对服务器上资源的引用,因此我们需要在 POM.xml 文件中添加一些代码。我已在 POM.xml 文件中添加了以下代码,但仍然无法正常工作:(

<resources>
        <resource>
            <directory>src/main/resources</directory>
            <filtering>true</filtering>
            <includes>
                <include>stories</include>
            </includes>
        </resource>

    </resources>

寻求帮助。

最佳答案

有两种方法可以实现这一目标

Approach 1)

如果不在main方法内部 URL url = getClass().getClassLoader().getResource("someresource.xxx"); 如果它在 main 内部,您需要创建类的对象,然后对其调用 getClass 。

Approach 2)

通过扩展 URLStreamHandler

import java.io.IOException;
import java.net.URL;
import java.net.URLConnection;
import java.net.URLStreamHandler;

/** A {@link URLStreamHandler} that handles resources on the classpath. */
public class YourClass extends URLStreamHandler {
    /** The classloader to find resources from. */
    private final ClassLoader classLoader;

    public YourClass() {
        this.classLoader = getClass().getClassLoader();
    }

    public YourClass(ClassLoader classLoader) {
        this.classLoader = classLoader;
    }

    @Override
    protected URLConnection openConnection(URL u) throws IOException {
        final URL resourceUrl = classLoader.getResource(u.getPath());
        return resourceUrl.openConnection();
    }
}

引用号:URL to load resources from the classpath in Java

关于java - 使用 Maven ClassLoader.getSystemClassLoader().getResource() 返回 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43177931/

相关文章:

maven - 如何将包含多个 jar 的外部文件夹添加到 Web 应用程序的 Maven 构建中?

java - 错误 : java: cannot access org. openqa.selenium.HasInputDevices 找不到 org.openqa.selenium.HasInputDevices 的类文件

java - in 参数化 sql 查询中的运算符

java - 存储和读取大型数组

java - Android同时触摸和触摸释放

java - Spring 工具套件中的 maven-compiler-plugin :3. 7.0:compile (default-compile)

maven - 如何避免 Maven 构建中的 "Overlappping classes"警告?

java - 您可以将 TestNG 的数据提供程序与 JBehave 一起使用吗?

java - JBehave 是否像 Jasmine 一样工作?

java - Java中定义一个变量类型为另一个变量