战争中的一个班级有没有办法从它的耳边接入META-INF?

Eri*_* B. 4 java ear war pom.xml maven

这种需求可能听起来有点复杂,如果是这样,那么我愿意接受关于实施最佳实践的建议.我的问题如下.我有一个WAR webapp,它包含在EAR中.一切都是青春的.从我的webapp中,我试图显示耳朵和战争的神器ID和版本号.

战争是一个相当容易处理的案件.我可以使用简单的maven过滤在构建战争时将必要的artifactId/versionId注入到战争中.然而,耳朵更复杂.

我知道有一个META-INF/maven /// pom.properties,我可以在耳边看到包含该信息,但我看不到它.

我已经尝试(从jsp页面内)以下内容但没有成功(所有有和没有前导/); 所有调用都返回null:

getClass().getClassLoader().getResource( "/META-INF/maven/<group>/<artifact>/pom.properties");
getClass().getClassLoader().getResourceAsStream( "/META-INF/maven/<group>/<artifact>/pom.properties");
Run Code Online (Sandbox Code Playgroud)

这甚至可以使用类加载器吗?或者是类加载器配置依赖吗?有没有更好的方法来获取此信息?

我目前正在JBoss上运行测试,但最终的部署将在WebSphere上进行.但是,理想情况下,我想要一个不依赖于服务器的解决方案.

谢谢!

埃里克

Osw*_*Osw 5

我不相信这是可能的,因为EAR,EJB和WAR具有不同的类加载器,根据通用的,可预测的和Java EE范围的方案,它们没有必要相互链接.

最近,我遇到了类似的问题,我发现的唯一可接受的解决方案,被指定env-entryapplication.xml,并通过@Resource注入阅读它:

<application xmlns="http://java.sun.com/xml/ns/javaee"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/application_6.xsd"
             version="6">

  <!-- usual stuff goes here -->
  <env-entry>
    <description>application-wide property</description>
    <env-entry-name>java:app/env/AppWideProperty</env-entry-name>
    <env-entry-type>java.lang.String</env-entry-type>
    <env-entry-value>stackoverflow.com</env-entry-value>
  </env-entry>


</application>
Run Code Online (Sandbox Code Playgroud)

以及后来的任何课程:

public class CalcResultCachePool {
  @Resource(lookup="java:app/env/AppWideProperty")
  String appWideProperty;

  //
  //
}
Run Code Online (Sandbox Code Playgroud)