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

Java 使用Maven ClassLoader.getSystemClassLoader().getResource()返回null,java,maven-plugin,jbehave,Java,Maven Plugin,Jbehave,我的项目目录结构(在Eclipse中): 在Main类中,我在第行下面有一个返回,在通过MAVEN执行Main类时返回null String folderName = "stories"; URL appURL = ClassLoader.getSystemClassLoader().getResource(folderName); 通过maven执行时,appURL返回NULL 通过阅读Stackoverflow上的一篇文章,我了解到,我正在服务器上运行webapp,但没有对服务器上资源的引

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

在Main类中,我在第行下面有一个返回,在通过MAVEN执行Main类时返回null

String folderName = "stories";
URL appURL = ClassLoader.getSystemClassLoader().getResource(folderName);
通过maven执行时,appURL返回NULL

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


src/main/resources
真的
故事

寻求帮助。

有两种方法可以实现此目的

方法1)

如果它不在主方法内 URL URL=getClass().getClassLoader().getResource(“someresource.xxx”); 若它在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();
    }
}

Ref:

您能否尝试使用此可选的getClass().getClassLoader().getResource(…)作为ClassLoader.getSystemClassLoader()的替代。getResource(…)获取错误为“无法对非静态方法进行静态引用”,因为上面的代码在main方法中。您好,您需要创建类的对象,如YourClass a=new YourClass();然后您需要调用.getClass().getClassLoader().getResource(…)非常感谢您的帮助,Pradeep。成功了。我创建了类的对象,然后使用getclass()方法
<resources>
        <resource>
            <directory>src/main/resources</directory>
            <filtering>true</filtering>
            <includes>
                <include>stories</include>
            </includes>
        </resource>

    </resources>
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();
    }
}