我的目标是在JBoss 7.1.1中部署一个ear文件。ear文件中的一个类(我不能更改)使用JRE的rt.jar的sun.net.util.IPAddressUtil
类。
在我的IDE中(eclipse)解析这个类,它可以正常编译。但是当我尝试在JBoss 7.1.1上部署(包含类的ear)时,它给了我java.lang.NoClassDefFoundError: sun/net/util/IPAddressUtil
。在我的机器中设置了JAVA_HOME
变量,我看到JBoss和eclipse都使用相同的JDK(1.6.X)
当我将MySQL与lib文件夹中的rt.jar捆绑在一起时,MySQL可以正确部署(这是一种糟糕的方法)。
我看过JBoss community,它说为任何第三方jar配置为模块。然而,我需要的类在rt.jar中,我不赞成将其添加为模块
有没有办法将JBoss 7.1.1配置为手动查看%JAVA_HOME%/jre/lib/rt.jar
?
先谢了。
2条答案
按热度按时间huus2vyu1#
JBoss 7使用jboss-modules技术进行模块化的类加载,类似于OSGi。它将使用rt.jar和一堆库在自己的lib目录中启动应用服务器本身。但是当它加载Web应用程序时,它将创建一个自定义的类加载器,根据它声明的模块依赖关系限制它将看到的类。
要声明模块依赖关系,您需要将jboss-deployment-structure.xml包含在JAR的META-INF目录中(或WAR的WEB-INF目录中)。请参阅https://docs.jboss.org/author/display/AS71/Class+Loading+in+AS7。要声明rt.jar中类的依赖关系,您需要一个依赖关系:
字符串
您也可以尝试提取IPAddressUtil类并将其打包为单独的模块。
kyxcudwk2#
See wildfly developer guide#1.8. Accessing JDK classes
默认情况下,并非所有的JDK类都会暴露给部署。如果您的部署使用了未暴露的JDK类,则可以使用jboss-deployment-structure.xml和系统依赖项来访问它们:
字符串