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

Chr*_*ris 4 jboss runtime classpath jboss7.x

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

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

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

我看过JBoss社区,它说要配置为任何第三方jar的模块.但是,我需要的类是在rt.jar中,我不赞成将它添加为模块

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

提前致谢.

Gee*_*nte 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>
Run Code Online (Sandbox Code Playgroud)

您还可以尝试提取IPAddressUtil类并将其打包为单独的模块.您可以从openjdk获取源代码,例如http://www.docjar.com/html/api/sun/net/util/IPAddressUtil.java.html

  • 只是评论,Jboss7不是基于OSGI,但它确实支持osgi,它是基于jboss-modules. (2认同)