使用 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
我的项目目录结构(在 Eclipse 中):
MyProject/
src/main/Java
src/main/resources
stories
file.story
在 Main class 中,在通过 MAVEN
执行 main class 时,return 行下面有 return nullString 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