![]() |
1
2
我认为Maven和Ivy的诞生是为了帮助管理JAR依赖性。也许你会发现这些有用。 关于在每个项目中复制jar与将它们放入服务器/lib之间的争论,我认为这取决于一点:您希望同时升级部署在Tomcat上的每个应用程序的可能性有多大?你能想象一个时间,在那台服务器上运行n个应用程序,而(n+1)第n个应用程序可能需要或需要一个特定jar的更新版本吗? 如果你不介意让所有的应用程序保持同步,那么一定要让它们使用一个公共的库库库。 我个人认为磁盘空间很便宜。我的首选是为每个应用程序复制jar,并将其放入war文件中。我喜欢分区。当OSGi变得更主流时,我希望看到更多。 |
![]() |
2
1
它在大多数情况下都有效,但是您可能会遇到一些令人恼火的情况,即您移入Tomcat的JAR正试图在某个Web应用程序JAR中创建类的实例,从而导致抛出ClassNotFoundException。我以前做过这个,但因为这些问题而停了下来。 |
![]() |
3
1
我真的不认为把库放在common/lib中是个好主意。将war文件用作servlet容器中的应用程序背后的想法是真正了解webapps之间的隔离。您可能会遇到一些错误,例如部署第三方战争(在WEB-INF/LIB中有它自己的库),并且它的行为异常,因为它从公共库加载了一个IT库的其他版本(请记住,加载类的常规行为是首先查看公共类加载器,如果找不到该类,请查看其中一个你的webapp)。甚至不要提到将一些应用程序移动到其他servlet容器或应用程序服务器会有多痛苦。 如前所述,您可以使用Maven来处理JAR依赖关系,如果您喜欢库的同构使用,那么可以在所有应用程序中定义一个POM父级(Maven行话)。 |
![]() |
4
1
根据我的经验,通过将库移动到Web容器本身,您应该非常小心地在Web应用程序之间共享库。 让他们生活在WEB-INF/LIB中,这样你的战争就可以自给自足了(总有一天你会高兴的)。 您可能会考虑使用Maven或AntIvy从公共存储库中提取库jar。这非常有用,在您的场景中不应该是一个问题。 编辑:一个显著的例外是Metro库——GlassFish的Web服务层——它需要在Web容器中而不是在Web应用程序中。 |