使用 Maven ClassLoader.getSystemClassLoader().getResource() return null

Using Maven ClassLoader.getSystemClassLoader().getResource() return null

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

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

在 Main class 中,在通过 MAVEN

执行 main class 时,return 行下面有 return null
String folderName = "stories";
URL appURL = ClassLoader.getSystemClassLoader().getResource(folderName);

通过maven执行时,appURL returns NULL.

通过阅读 Whosebug 上的一个 post,我了解到,我是 运行 服务器上的 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 中,则需要创建 class 的对象,然后对其调用 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