放置WAR依赖项的“正确”地方在哪里?

时间:2019-08-09 17:07:49

标签: java gradle java-ee websphere

我正在为现有项目创建构建脚本。他们的所有EAR文件都是(手动)构建的,并且将它们的执行方式放入WAR的JAR依赖项到EAR lib文件夹中。 WAR文件的WEB-INF/lib文件夹为空。使用gradle构建时,会将WAR的JAR依赖项放入WEB-INF/lib文件夹中,而在EAR lib文件夹中则什么也没有。

似乎任何一种都行得通,而且(对我而言)似乎更合乎逻辑的路径是将WAR依赖项放在WEB-INF/lib中。有没有首选或更正确的方法?

2 个答案:

答案 0 :(得分:3)

如果EAR中只有一个WAR文件,那么我绝对建议使用WEB-INF / lib。此外,我建议不使用EAR文件直接部署WAR,因为这样可以避免不必要的复杂性。

您希望将依赖项JAR放入EAR的情况是,当您有多个需要相同依赖项的WAR文件时。然后,您可以通过与应用程序中的所有WAR共享相同的依赖项来节省空间。

希望这会有所帮助!

答案 1 :(得分:2)

正如您所指出的那样,如果在技术上是一致的,那么两者在技术上都可以工作-假设EAR只是由一个Web模块组成,那么真正需要做的就是将它们全部放在一个位置,因为EAR中的内容无法“看到”默认Java EE类加载配置下WAR中的内容。

但是,从概念上讲,您是正确的-将WAR所使用的所有内容放在WAR本身中,而不是放在其他空缺的EAR中,这是更优雅,更简洁的方法。尽管现在没什么大不了的,但是如果您将应用程序扩展到多个模块(Web或EJB),则变得很重要,因为将内容放入EAR / lib会消除管理模块中多个依赖项的能力。如果在WAR1中需要一个版本的库,而在WAR2中需要另一个版本,那么如果要在EAR级别打包所有内容,那是不可能的。