我对我一直认为理所当然的事情有了第二个想法。即,在具有以下结构的EAR中:
EAR
\-- boo-ejb.jar
\-- foo-web.war
| \--WEB-INF
| \--lib
\--lib
..我认为我理解正确 WEB-INF / lib 仅适用于 jars ,仅适用于Web应用程序和EAR级 lib < / strong> ejb.jar 所需的 jars 。理由是以某种方式使依赖关系更清晰。但是,为什么不将所有内容转储到EAR级 lib 文件夹中?当然,如果存在某种冲突,我们希望深入了解和调查。这不是一个更清洁的解决方案,更不容易掩盖潜在的兼容性/依赖性不匹配问题吗?
答案 0 :(得分:1)
在EAR文件中,EAR级别的lib文件夹跨越所有Web应用程序(即EAR中的所有.wars)。 .war中的lib适用于仅适用于web-app war的库。
很多时候,您必须将特定库提升到EAR级别并设置classpath加载器首选项优先级设置(在提供的app-server和提供的EAR之间)jar。这是WebSphere等服务器的常见需求。
以下是maven的示例war配置,其中从EAR级别检索特定jar并且特别从WAR中排除:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<configuration>
<archive>
<manifestEntries>
<Class-Path>lib/wsdl4j-1.6.2.jar lib/mail-1.4.jar</Class-Path>
</manifestEntries>
</archive>
<packagingExcludes>WEB-INF/lib/wsdl4j-1.6.2.jar,WEB-INF/lib/mail-1.4.jar</packagingExcludes>
<warSourceDirectory>${basedir}/src/main/webapp</warSourceDirectory>
<warSourceExcludes>WEB-INF/jetty-env.xml</warSourceExcludes>
</configuration>
</plugin>
答案 1 :(得分:0)
我想说如果你有一个可以独立运行的Web应用程序,并且可以单独部署,那么它应该打包在战争中。但是,如果不是......如果战争只是一个更大的耳朵应用程序的一个组成部分,那就是它总是要交付/部署的方式,那么只需将Web应用程序所需的Web资源放入战争中,并且所有代码都在耳朵的lib中。