【问题标题】:Referencing a class packaged in an ear from a JBoss module从 JBoss 模块引用封装在耳朵中的类
【发布时间】:2016-05-11 01:54:58
【问题描述】:

我正在将一个耳朵 (myear.ear) 应用程序部署到 WildFly 9.0.2。 ear 包含一个 ear 模块,我们称之为 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>

如果我可以从那个自定义模块中找到打包在 ear 中的 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)

【问题讨论】:

  • 不,这是不可能的,依赖只能走另一种方式部署-->静态模块。

标签: java jboss wildfly wildfly-9


【解决方案1】:

不可能。耳朵只能依赖模块,反之则不行

【讨论】:

    【解决方案2】:

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

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

    pass 是相对的(在 modules 目录下的某个地方)。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-06-23
      • 2011-06-19
      • 2012-11-17
      相关资源
      最近更新 更多