JBoss 7.1.1:将jre的rt.jar添加到classpath

时间:2012-09-19 10:16:03

标签: jboss runtime classpath jboss7.x

我的目标是在JBoss 7.1.1中部署一个ear文件。 ear文件中的一个类(我无法更改)是使用sun.net.util.IPAddressUtil类JRE的 rt.jar

在我的IDE(eclipse)中解析了这个类并且它正常编译。但是当我尝试在JBoss 7.1.1上部署(包含类的耳朵)时,它给了我java.lang.NoClassDefFoundError: sun/net/util/IPAddressUtil。我的机器中设置了JAVA_HOME变量,我发现JBoss和eclipse都使用相同的JDK(1.6.X)

当我在lib文件夹中捆绑带有 rt.jar 的EAR时,EAR正确部署(这是一种不好的方法)。

我查看了JBoss community,其中说要配置为任何第三方jar的模块。但是,我需要的课程是在 rt.jar 中,我不赞成将其添加为模块

有没有办法配置JBoss 7.1.1来手动查看%JAVA_HOME%/jre/lib/rt.jar

提前致谢。

1 个答案:

答案 0 :(得分:13)

JBoss 7使用jboss-modules技术进行模块化类加载,类似于OSGi。 它将在其自己的lib目录中使用rt.jar和一堆库来启动应用程序服务器本身。 但是当它加载你的web应用程序时,它将创建一个自定义类加载器,根据它声明的模块依赖关系来限制它将看到的类。

要声明模块依赖关系,您需要在EAR的META-INF目录(或WAR的WEB-INF)中包含jboss-deployment-structure.xml。见https://docs.jboss.org/author/display/AS71/Class+Loading+in+AS7。要声明对rt.jar中的类的依赖,需要< system>依赖性:

<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类并将其打包为单独的模块。您可以从openjdk获取来源,例如http://www.docjar.com/html/api/sun/net/util/IPAddressUtil.java.html