为什么要将JAR文件打包到WAR存档中,如果它们在Maven Central中可用?

时间:2011-10-16 15:17:28

标签: java servlets maven

我想知道是否有可能以某种方式通知Servlet Container在部署期间从Maven Central下载所需的JAR档案,而不是将它们打包成WAR(在WEB-INF/lib中)。据我所知,Java的设计考虑了这种方法。技术上可行吗?

2 个答案:

答案 0 :(得分:2)

我不知道任何这样做的servlet容器。 servlet规范说WAR文件将包含应用程序的所有依赖项。当然,任何事情都“技术上可行”,这是一个有趣的想法,但我认为你会做很多自定义编码。我认为唯一远远接近的是Virgo Web Server。它是一个OSGi / Spring DM容器,它有a "repository" where artifacts can be found的概念并按需加载。它可以是configured to use a local Maven repo。如果它还不是一个选项,它应该是一个相对较短的步骤,使它使用远程仓库。 Virgo允许将WAR部署到它以及OSGi包,但它不是典型的servlet容器。

答案 1 :(得分:1)

servlet规范在maven之前出现。这就是war文件应该包含jar的原因。

如果你问为什么他们不改变它:两个原因:

  • 它将破坏现有的习惯和现有的servlet容器
  • maven不是标准 - 标准不能依赖非标准(即使它是事实上的标准)

如果你问是否可能并且是个好主意。这是可能的,但它可能不是一个好主意。您应该部署已经过测试的内容(在分阶段和/或QA环境中)。您无法确认将不会替换repo中的依赖项,因为您无法确定在部署期间与存储库的连接是否正常,这将破坏您的部署。