【发布时间】:2012-08-24 15:25:50
【问题描述】:
我已经用这种结构构建了一个耳朵(此处未显示所有文件):
myapp.ear/
myapp-ejb.jar
myapp-web.war
META-INF/
application.xml
lib
myapp-common.jar
问题是,当战争中的代码尝试引用 myapp-common.jar 中的类时,它会抛出 java.lang.ClassNotFoundException。
注意META-INF/application.xml的内容:
<?xml version="1.0" encoding="UTF-8"?>
<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">
<display-name>pncr-portal-ear</display-name>
<module>
<web>
<web-uri>myapp-web.war</web-uri>
<context-root>/</context-root>
</web>
</module>
<module>
<ejb>myapp-ejb.jar</ejb>
</module>
<library-directory>/lib</library-directory>
</application>
库目录在此处定义为相对于耳朵根目录的/lib 目录,这正是它所在的位置,但尽管Java EE 5(可能是6)它并未加载到类路径中规范说它应该被加载到类路径中。
【问题讨论】:
-
仅在
war-pom中将myapp-common.jar设置为provided,并让myapp-common.jar在ejb-pom中具有默认范围。这对我有用。
标签: java jakarta-ee glassfish java-ee-6 glassfish-3