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

时间:2017-04-03 06:35:03

标签: java maven-plugin jbehave

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

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

在Main class中,我返回以下行,并在通过MAVEN激活主课时返回null

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

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

通过阅读Stackoverflow上的一篇文章,我得知道,我在服务器上运行webapp但是没有引用服务器上的资源,所以我们需要在POM.xml文件中添加一些代码。我在POM.xml文件中添加了以下代码,但仍无法正常工作:(

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

    </resources>

寻求帮助。

1 个答案:

答案 0 :(得分:1)

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

  

方法1)

如果它不在main方法中 URL url = getClass()。getClassLoader()。getResource(&#34; someresource.xxx&#34;); 如果它在main中,你需要创建类的对象,然后在其上调用getClass。

  

方法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