如何使用maven公开war内部的WEB-INF/lib

如何使用maven公开war内部的WEB-INF/lib,maven,jboss,jar,war,ear,Maven,Jboss,Jar,War,Ear,我们正在我们的web应用程序(war)中使用第三方war。为了与war通信,我们创建了一个桥接模块(jar)。其目的是防止我们的web应用程序直接与外部war通信,而是通过桥接模块进行通信 所有3个模块(2个WAR和1个jar)都位于部署在JBoss中的ear文件中 ear - war1 (our web app) - war2 (external web app) - bridge jar 需要注意的是,桥接jar使用一些API(公开为jar),这些API存在于外部w

我们正在我们的web应用程序(war)中使用第三方war。为了与war通信,我们创建了一个桥接模块(jar)。其目的是防止我们的web应用程序直接与外部war通信,而是通过桥接模块进行通信

所有3个模块(2个WAR和1个jar)都位于部署在JBoss中的ear文件中

ear
    - war1 (our web app)
    - war2 (external web app)
    - bridge jar
需要注意的是,桥接jar使用一些API(公开为jar),这些API存在于外部war的WEB-INF/lib目录中

在启动JBoss时,我们得到java.lang.NoClassDefFoundError错误,因为桥接器无法找到外部war的WEB-INF/lib中存在的API

我们不想把所有的外部罐子直接放在耳朵下面,因为这意味着外部罐子不仅仅局限在它的战争中


有没有办法从桥接jar访问外部战争的WEB-INF/lib中的jar?我们可以使用maven构建过程来实现这一点,还是有更好的方法来实现这一点?

我们最近遇到了一个类似的问题,我们的JAR无法看到其他JAR。通过使用“bridge jar”的pom.xml中定义的
maven ejb插件创建
manifest.mf
解决了这个问题

有两种方法可以做到这一点:

a) 如果bridge jar的pom.xml已经将war1和war2定义为依赖项,那么使用maven ejb插件

<configuration>
            <ejbVersion>3.0</ejbVersion>
            <archive>
            <manifest>
              <addClasspath>true</addClasspath>
            </manifest>
         </archive>

        </configuration>

3
真的
这将自动生成manifest.mf,其类路径与pom中定义的所有依赖项匹配

b) 否则,用您需要的正确条目定义您自己的manifest.mf,并像这样指向它

<configuration>
            <ejbVersion>3.0</ejbVersion>
            <archive>
            <manifestFile>src/main/resources/META-INF/MANIFEST.MF</manifestFile>
         </archive>

        </configuration>

3
src/main/resources/META-INF/MANIFEST.MF
因为您的JAR位于war1的WEB-INF/lib中,所以我认为您应该选择选项2,其中包含直接条目,如


类路径:WEB-INF/lib/some external.jar

我们最近遇到了一个类似的问题,我们的jar无法看到其他jar。通过使用“bridge jar”的pom.xml中定义的
maven ejb插件创建
manifest.mf
解决了这个问题

有两种方法可以做到这一点:

a) 如果bridge jar的pom.xml已经将war1和war2定义为依赖项,那么使用maven ejb插件

<configuration>
            <ejbVersion>3.0</ejbVersion>
            <archive>
            <manifest>
              <addClasspath>true</addClasspath>
            </manifest>
         </archive>

        </configuration>

3
真的
这将自动生成manifest.mf,其类路径与pom中定义的所有依赖项匹配

b) 否则,用您需要的正确条目定义您自己的manifest.mf,并像这样指向它

<configuration>
            <ejbVersion>3.0</ejbVersion>
            <archive>
            <manifestFile>src/main/resources/META-INF/MANIFEST.MF</manifestFile>
         </archive>

        </configuration>

3
src/main/resources/META-INF/MANIFEST.MF
因为您的JAR位于war1的WEB-INF/lib中,所以我认为您应该选择选项2,其中包含直接条目,如


类路径:WEB-INF/lib/some external.jar

我们修改了桥接jar中的MANIFEST.MF文件,添加了包含我们需要的外部jar的类路径条目。MANIFEST.MF文件如下:MANIFEST版本:1.0 Ant版本:Apache Ant 1.5.3包:com.ket.sa类路径:WEB-INF/lib/WebObjects-9.2.1.jar规范标题:标题规范供应商:实现标题:com.ket.sa实现供应商:实现版本:7.6,但无法找到上述jar。这是正确的方法吗?看起来不错,想知道这是否是jboss的问题。另外,我们修改了bridge jar中的MANIFEST.MF文件,添加了包含所需外部jar的类路径条目。MANIFEST.MF文件如下:MANIFEST版本:1.0 Ant版本:Apache Ant 1.5.3包:com.ket.sa类路径:WEB-INF/lib/WebObjects-9.2.1.jar规范标题:标题规范供应商:实现标题:com.ket.sa实现供应商:实现版本:7.6,但无法找到上述jar。这是正确的方法吗?看起来不错,不知道这是否是jboss的问题,请参见