从JBoss模块引用封装在耳朵中的类

时间:2016-02-02 10:10:15

标签: java jboss wildfly wildfly-9

我正在将一个ear(myear.ear)应用程序部署到WildFly 9.0.2。耳朵包含耳模块,我们称之为myjar.jar。

另外,我有一个外部自定义 JBoss模块。在该模块中,我需要(更别提理由)调用myjar.jar中打包的类。

甚至可能???

这就是 JBoss模块 module.xml的样子:

<module xmlns="urn:jboss:module:1.1" name="path.to.module.dir">
    <resources>
        <resource-root path="..."/>
    </resources>
    <dependencies>
        <module name="deployment.myear.ear.myjar.jar"  />
    </dependencies>
</module>

如果我可以从该自定义模块解决耳塞中包装的jar,我该如何指定模块名称。以上给出了以下错误:

Caused by: org.jboss.modules.ModuleLoadError: deployment.myear.ear.myjar.jar:main
    at org.jboss.modules.ModuleLoadException.toError(ModuleLoadException.java:74)
    at org.jboss.modules.Module.getPathsUnchecked(Module.java:1384)
    at org.jboss.modules.Module.loadModuleClass(Module.java:555)
    at org.jboss.modules.ModuleClassLoader.findClass(ModuleClassLoader.java:197)
    at org.jboss.modules.ConcurrentClassLoader.performLoadClassUnchecked(ConcurrentClassLoader.java:455)
    at org.jboss.modules.ConcurrentClassLoader.performLoadClassChecked(ConcurrentClassLoader.java:404)
    at org.jboss.modules.ConcurrentClassLoader.performLoadClass(ConcurrentClassLoader.java:385)
    at org.jboss.modules.ConcurrentClassLoader.loadClass(ConcurrentClassLoader.java:130)
    at java.lang.ClassLoader.defineClass1(Native Method)
    at java.lang.ClassLoader.defineClass(ClassLoader.java:760)
    at org.jboss.modules.ModuleClassLoader.doDefineOrLoadClass(ModuleClassLoader.java:353)
    at org.jboss.modules.ModuleClassLoader.defineClass(ModuleClassLoader.java:432)
    at org.jboss.modules.ModuleClassLoader.loadClassLocal(ModuleClassLoader.java:269)
    at org.jboss.modules.ModuleClassLoader$1.loadClassLocal(ModuleClassLoader.java:77)
    at org.jboss.modules.Module.loadModuleClass(Module.java:560)
    at org.jboss.modules.ModuleClassLoader.findClass(ModuleClassLoader.java:197)
    at org.jboss.modules.ConcurrentClassLoader.performLoadClassUnchecked(ConcurrentClassLoader.java:455)
    at org.jboss.modules.ConcurrentClassLoader.performLoadClassChecked(ConcurrentClassLoader.java:404)
    at org.jboss.modules.ConcurrentClassLoader.performLoadClass(ConcurrentClassLoader.java:385)
    at org.jboss.modules.ConcurrentClassLoader.loadClass(ConcurrentClassLoader.java:130)
    at java.lang.Class.forName0(Native Method)
    at java.lang.Class.forName(Class.java:264)

2 个答案:

答案 0 :(得分:0)

在模块中包含外部jar并通过模块类加载器加载它的类的方法是将其作为外部资源引用(假设它存在于指定位置:

<sub-deployment name="myjar.jar">
    <dependencies>
        ...
    </dependencies>
    <resources>
        <resource-root path="../../../modules/path/to/resource/jar" />
    </resources>
</sub-deployment>

传递是相对的(这里是模块目录下的某个地方)。

然而,部署(和子部署)之间的依赖关系是可能的。

答案 1 :(得分:-1)

不可能。耳朵只能依赖于模块,反之亦然