java - 如何从我的 EAR 文件中的类加载文本文件?

标签 java jsf jakarta-ee war ear

我在 Eclipse(实际上是 IBM RAD 7)中有一个在 WebSphere 7 上运行的 Java EE 5 项目。

工作区项目布局如下:

webapp <-- produces a WAR file
webappEAR <-- produces the EAR file
webappEJB <-- holds the Service and DAO classes
webappJPA <-- holds the domain/entity classes
webappTests <-- holds the JUnit tests

在我的一个服务类中(在 webappEJB 项目中)我需要加载一个文本文件作为资源。

我将我的文本文件放在文件夹中:

webappEAR/emailTemplates/myEmailTemplate.txt

因此它出现在 EAR 文件中:

webappEAR.EAR
/emailTemplates/myEmailTemplate.txt

在我的服务类中,这是我加载它的方式:

ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
InputStream input = classLoader.getResourceAsStream("emailTemplates/myEmailTemplate.txt");
BufferedReader br = new BufferedReader(new InputStreamReader(input));
/* and so on */

问题是 input 总是空的——它找不到资源。

我尝试了一个前导斜线 ("/emailTemplates/myEmailTemplate.txt"),但这也不起作用。

知道我做错了什么吗?或者更好的方法?

谢谢!

罗布

最佳答案

EAR 文件层次结构/内容不在您的类路径中;根据配置,打包在 EAR 文件中的 Jar 文件可能位于模块的类路径中。

因此,将资源打包到包含“服务类”的模块的类路径中的任何 JAR 文件中。

为资源创建一个新的 JAR 并非没有道理,特别是如果您将独立更新它们。

关于java - 如何从我的 EAR 文件中的类加载文本文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12219347/

相关文章:

java - 带有比较加三元运算符表达式的表达式 "a==1 ? 1 : 0"是原子的吗?

java - 使用 ABBOTT & COSTELLO 自动测试 Web Start 程序

java - Spring Kafka 与 Confluence Kafka Avro 反序列化器

java - gmap坐标转换为字符串

eclipse - 如何使用/连接数据库、EJB 和 TomCat

java - 尝试在 .jsp 页面上的数据库表中列出员工时,employeesRepo 为 null

java - 在intellij运行配置中包括排除的jar

jsf - 使用 <c :set> inside Facelets <ui:repeat> tags 的 EL 变量

jsf - 仅限 Primefaces 可拖动事件

java - 如何将带有 CDI 的 @Alternative 从 WAR 注入(inject)到 EJB 模块中