JBoss 7.1.1:将jre的rt.jar添加到类路径

disho6za  于 12个月前  发布在  其他
关注(0)|答案(2)|浏览(180)

我的目标是在JBoss 7.1.1中部署一个ear文件。ear文件中的一个类(我不能更改)使用JRE的rt.jarsun.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
先谢了。

huus2vyu

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中类的依赖关系,您需要一个依赖关系:

<jboss-deployment-structure xmlns="urn:jboss:deployment-structure:1.1">
    <deployment>
        <dependencies>
            <system export="true">
                <paths>
                    <path name="sun/net/util"/>
                </paths>
            </system>
        </dependencies>
    </deployment>
</jboss-deployment-structure>

字符串
您也可以尝试提取IPAddressUtil类并将其打包为单独的模块。

kyxcudwk

kyxcudwk2#

See wildfly developer guide#1.8. Accessing JDK classes
默认情况下,并非所有的JDK类都会暴露给部署。如果您的部署使用了未暴露的JDK类,则可以使用jboss-deployment-structure.xml和系统依赖项来访问它们:

<jboss-deployment-structure xmlns="urn:jboss:deployment-structure:1.2">
<deployment>
    <dependencies>
        <system export="true">
            <paths>
                <path name="sun/net"/>
            </paths>
        </system>
    </dependencies>
</deployment>

字符串

相关问题