class.getResource() Java-EE(野蝇)
class.getResource() within Java-EE (wildfly)
我正在使用 Java-EE(Wildfly v.17)
我想访问位于 WEB-INF/classes/config.txt
中的文件 "config.txt"。
我知道 servletContext
的一种解决方案。
但是,我想知道为什么一些常见的东西不起作用:
// prints: file:/Users/test/server/wildfly-17.0.1.Final/modules/system/layers/base/org/jboss/as/ejb3/main/timers/
// why does this point to "ejb3/main/timers" ???
log.info(User.class.getResource("/").toExternalForm());
这些都不起作用,我总是得到 java.lang.NullPointerException
(未找到文件,但文件在那里!)
var resource = User.class.getResource("/config.txt");
var resource = User.class.getResource("/WEB-INF/classes/config.txt")
var resource = User.class.getResource("config.txt")
var resource = getClass().getResource("config.txt")
var resource = Thread.currentThread().getContextClassLoader().getResource("config.txt")
如何在 Wildfly 中使用 getResource()
或 getResourceAsStream()
?
(或者我应该把 config.txt
放在哪里才能使用 getResource()
?)
访问 WEB-INF/classes/config.txt
文件中数据的最简单方法是使用 java.lang.Class.getResourceAsStream("/config.txt"),第一个示例已介绍。
如果此 returns null
则文件不存在。如果您使用 Maven 构建,那么最常见的原因是将 config.txt
放在 src/main/java
目录中而不是 src/main/resources
.
尝试使用 java.lang.Class.getResource("/config.txt") 将以失望告终,因为 returned 的 URL 可能包含一个难以使用或无法使用的方案,例如 "jar://..." 或 "vfs://..."。您不能依赖 WildFly 为 class-loader 资源 return "file://.." 样式的 URL。
Jboss AS7 或 wildfly 在 class 加载机制中使用其内部模块结构,因此当您调用 getResource 方法加载文件(外部文件)时,它会尝试使用 ejb3 加载文件模块 ( ) 和 ejb3 模块尝试从定时器文件夹
加载文件
<module xmlns="urn:jboss:module:1.5" name="org.jboss.as.ejb3">
<properties>
<property name="jboss.api" value="private"/>
</properties>
<resources>
<artifact name="${org.wildfly:wildfly-ejb3}"/>
**<resource-root path="timers" />**
</resources>
您可以尝试以下建议:-
将您的配置文件移动到计时器文件夹下
创建你的模块并强制jboss从你的模块加载classes,你可以在下面的link"[=11]中找到步骤=]"
将您的配置文件移动到资源文件夹 "src/main/resources" 下并将其作为资源流加载
我正在使用 Java-EE(Wildfly v.17)
我想访问位于 WEB-INF/classes/config.txt
中的文件 "config.txt"。
我知道 servletContext
的一种解决方案。
但是,我想知道为什么一些常见的东西不起作用:
// prints: file:/Users/test/server/wildfly-17.0.1.Final/modules/system/layers/base/org/jboss/as/ejb3/main/timers/
// why does this point to "ejb3/main/timers" ???
log.info(User.class.getResource("/").toExternalForm());
这些都不起作用,我总是得到 java.lang.NullPointerException
(未找到文件,但文件在那里!)
var resource = User.class.getResource("/config.txt");
var resource = User.class.getResource("/WEB-INF/classes/config.txt")
var resource = User.class.getResource("config.txt")
var resource = getClass().getResource("config.txt")
var resource = Thread.currentThread().getContextClassLoader().getResource("config.txt")
如何在 Wildfly 中使用 getResource()
或 getResourceAsStream()
?
(或者我应该把 config.txt
放在哪里才能使用 getResource()
?)
访问 WEB-INF/classes/config.txt
文件中数据的最简单方法是使用 java.lang.Class.getResourceAsStream("/config.txt"),第一个示例已介绍。
如果此 returns null
则文件不存在。如果您使用 Maven 构建,那么最常见的原因是将 config.txt
放在 src/main/java
目录中而不是 src/main/resources
.
尝试使用 java.lang.Class.getResource("/config.txt") 将以失望告终,因为 returned 的 URL 可能包含一个难以使用或无法使用的方案,例如 "jar://..." 或 "vfs://..."。您不能依赖 WildFly 为 class-loader 资源 return "file://.." 样式的 URL。
Jboss AS7 或 wildfly 在 class 加载机制中使用其内部模块结构,因此当您调用 getResource 方法加载文件(外部文件)时,它会尝试使用 ejb3 加载文件模块 ( ) 和 ejb3 模块尝试从定时器文件夹
加载文件<module xmlns="urn:jboss:module:1.5" name="org.jboss.as.ejb3">
<properties>
<property name="jboss.api" value="private"/>
</properties>
<resources>
<artifact name="${org.wildfly:wildfly-ejb3}"/>
**<resource-root path="timers" />**
</resources>
您可以尝试以下建议:-
将您的配置文件移动到计时器文件夹下
创建你的模块并强制jboss从你的模块加载classes,你可以在下面的link"[=11]中找到步骤=]"
将您的配置文件移动到资源文件夹 "src/main/resources" 下并将其作为资源流加载