【问题标题】:WAR class access another class from other WARWAR 类从其他 WAR 访问另一个类
【发布时间】:2015-06-17 00:32:02
【问题描述】:

我是一个 Jboss Wildfly 8.2 实例我有一个 webapp ROOT.war 和另一个 OTHER.war,我需要 OtherXYZ.class 里面的 OTHER.war 类能够访问 RootXYZ.class .我在某处读到这可能使用EAR,但我不知道如何。

这里有我需要实现的架构

                     ClassesVisibleToAllWars.jar
                     /          |              \    
            (access)/           |(access)       \(access)
                   /            |                \
            Root.war         Other1.war         Other2.war
           /                    |                    |
        R.class              O1.class              O2.class  
  • 不能创建/使用Global Module 放入wildfly/modules 目录。我只能访问standalone/deployments/* 目录
  • ClassesVisibleToAllWars.jar 中的所有类必须对 R.classO1.classO2.class 可见,例如
  • 可能最终会部署新的其他 .war 文件,并且这种行为必须持续存在

问题

我应该输入ClassesVisibleToAllWars.jar 以实现该架构?

【问题讨论】:

  • 显然你正在处理依赖问题。为什么不使用构建脚本(Maven/Ant...)将依赖项打包到 .war 文件中?你考虑过Nexus sonatype
  • 为什么不把OtherXYZ.class解压到一个jar文件OtherXYZ.jar,然后把OtherXYZ.jar打包到ROOT.war和OTHER.war中

标签: java jboss classloader war wildfly-8


【解决方案1】:

您将无法在一场战争中从另一场战争中引用一个班级。

如果您部署为 ear,您可以将 RootXYZ.class 从 ROOT.war 中拉出,然后将其放在一个 jar 中,该 jar 将位于两个 war 的类路径中(通常在 ear 中的 /lib 目录中)。我不确定在 Wildfly 中设置它所需的确切步骤,但它通常是 META-INF/application.xml 中的设置,类似于:

<library-directory>/lib</library-directory>

由于在上文中您已经将公共类放入 jar 文件中,因此我可能只是将这个 jar 包含在每个 war 文件中,作为构建过程的一部分。

【讨论】:

  • “你不能在一场战争中从另一场战争中引用一个班级。”您能否提供有关 WAR 之间的 this/classes 可见性的规范或文档?
  • 我无法指出所有内容,只能说一个war文件的意义在于包含运行应用程序所需的所有资源。用于将多个应用程序打包在一起的 Ear 文件。
猜你喜欢
  • 2018-10-26
  • 1970-01-01
  • 1970-01-01
  • 2013-01-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多