我们有许多应用程序需要在 WebLogic 上引用 Oracle 和我们自己的共享 Java EE 库。它们的结构如下:
我们自己的共享库“框架”与所有非 Oracle 第三方库 (JAR:s) 一起打包为 EAR 中的 JAR,并作为共享库部署在 WebLogic 中。这是它的清单:
Manifest-Version: 1.0
Created-By: Apache Maven 3.0.4
Built-By: lajokon
Build-Jdk: 1.7.0_07
Implementation-Vendor: <organization>
Implementation-Title: Framework Lib
Implementation-Version: 15.0.2
Implementation-Vendor-Id: org
Specification-Vendor: <organization>
Specification-Title: Framework Lib
Specification-Version: 15.0.2
Extension-Name: framework-lib
所有 JAR:s 都在 APP-INF/lib 中
每个应用程序都打包在其自己的 EAR 内的 WAR 中。WAR weblogic.xml:
<wls:weblogic-web-app>
<wls:weblogic-version>10.3.6</wls:weblogic-version>
<wls:context-root>app-name</wls:context-root>
<wls:library-ref>
<wls:library-name>adf.oracle.domain.webapp</wls:library-name>
<wls:specification-version>1.0</wls:specification-version>
<wls:exact-match>false</wls:exact-match>
</wls:library-ref>
<wls:library-ref>
<wls:library-name>jsf</wls:library-name>
<wls:specification-version>2.0</wls:specification-version>
<wls:exact-match>false</wls:exact-match>
</wls:library-ref>
</wls:weblogic-web-app>
EAR 应用程序.xml:
<application>
<display-name>app-name</display-name>
<module>
<web>
<web-uri>app-name.war</web-uri>
<context-root>/app-name</context-root>
</web>
</module>
</application>
EAR weblogic-application.xml:
<weblogic-application>
<library-ref>
<library-name>adf.oracle.domain</library-name>
<specification-version>1.0</specification-version>
<exact-match>false</exact-match>
</library-ref>
<library-ref>
<library-name>coherence</library-name>
<specification-version>3.7</specification-version>
<exact-match>false</exact-match>
</library-ref>
<library-ref>
<library-name>framework-lib</library-name>
<specification-version>15.0</specification-version>
<exact-match>false</exact-match>
</library-ref>
</weblogic-application>
所有库都默认部署或在 WL 中正确部署。与应用程序 EAR 一样。
但是,当我访问应用程序时,我得到运行时错误,说它无法加载位于 WAR:s WEB-INF/classes 目录中的资源!?
但是,我可以从日志输出中看到,它从 Framework EAR 加载资源。为什么 WL 似乎不关心我的 WAR 的内容?