我可以直接在 jboss EAP 7.3 容器中包含相关的 jar 文件吗?

can I include dependent jar files directly in a jboss EAP 7.3 container?

我正在将 java ear 应用程序从 weblogic 迁移到 jboss。该应用程序是一个耳朵,在 pom 中具有以下对 antlr 的 maven 依赖性:

<dependency>
    <groupId>antlr</groupId>
    <artifactId>antlr</artifactId>
    <version>2.7.7</version>
    <scope>test</scope>
</dependency>

在本地主机上,我们使用 jetty,所以它被包含在 pom 中,我猜是由于正在测试的范围。在我们的 test/production 环境中,我们部署在 Weblogic 上,我正试图将其移动到 jboss。部署到 jboss 时 ear 失败,因为 weblogic 会自动在容器中包含此 antlr jar 而 jboss 不会。因此,对于 jboss 构建,我必须注释掉范围行并将 antlr 直接包含在 ear 文件中。我不想更改代码,但仍然可以在 jboss 和 weblogic 上运行。

是否可以将 antlr 依赖项作为模块或其他一些类路径设置直接包含在 jboss 中?

Antlr 是一个基本模块,因此您可以将它添加到您的依赖项中,jboss 将使您的应用程序可以访问该模块。

一种方法是在你的 jar 文件的清单中添加依赖项,在你的 maven 构建中:

        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-jar-plugin</artifactId>
            <version>3.1.1</version>
            <configuration>
                <archive>
                    <manifestEntries>
                        <Dependencies>org.antlr</Dependencies>
                    </manifestEntries>
                </archive>
            </configuration>
        </plugin>

或者,您可以将 jboss-deployment-structure.xml 文件添加到您的应用程序并在那里声明依赖项。

我最终在 jboss_home/module/antlr/main/module.xml 中添加了一个模块,但我认为 jboss-deployment-structure.xml 也可以。 jboss-deployment-structure 很好我想如果我想控制哪个部署获取文件。我想默认将其提供给所有部署,因此改为放入域配置文件是有意义的。

我把这个放在 module.xml 和 antlr jar 在同一个文件夹里。

<module xmlns="urn:jboss:module:1.1" name="antlr">
    <resources>
        <resource-root path="antlr-2.7.7.jar"/>
    </resources>
</module>

然后我在 domain.xml 中添加了这个:

<subsystem xmlns="urn:jboss:domain:ee:4.0">
        ...
        <global-modules>
             <module name="antlr" slot="main"/>
         </global-modules>
         ...
</subsystem>

我重新启动了所有主机,现在部署似乎工作正常。谢谢!