我已经用这种结构建立了一个耳朵(不是这里显示的所有文件):
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)规范说它应该是加载到类路径中。