不同的WAR文件,共享资源

时间:2008-12-02 15:54:36

标签: java javascript css deployment

假设您有多个应用程序共享相同的代码和大多数其他资源,但外观和感觉有所不同,某些标签更改等等(想想品牌推广)。如果每个Web应用程序都要使用自己的WAR文件,那么您将在何处放置共享资源?

我已经使用类路径来共享类和属性文件。但是javascript和css文件怎么样?是创建和部署一个额外WAR文件的最佳方法,该文件将为这些共享文件提供其他应用程序所需的文件吗?

我还想到了一个构建脚本,它做了一些魔法,并从一个共同的源码喷出(稍微)不同的WAR,但我不喜欢它,因为它只是在你需要构建/测试/运行时不必要的复杂化单一申请。

任何其他提示和技巧都将不胜感激。

6 个答案:

答案 0 :(得分:5)

您可以在同一个EAR中部署两个WAR,并将公共资源放入EAR中。然后将相应的依赖项放在Web应用程序的清单中,以链接到耳中的jar文件。

答案 1 :(得分:5)

我看到用于此类产品系列配置的策略在使用overlays构建时使用WAR maven。您定义了一个包含公共内容的公共WAR,并将其与包含特定内容的其他WAR重叠,以便为每个应用程序生成不同的WAR。如果在不同的计算机上部署WAR变体,则此方法可能最有用。但我不确定我是否真的可以推荐这个。

如果您实际覆盖了内容,请记住指定覆盖配置,否则覆盖顺序不是确定性的。它甚至可能随着maven-war-plugin升级而改变。 (在我们的案例中确实如此。)

答案 2 :(得分:3)

如果你不想使用tomcat等进入EAR路线;还有一些其他方法可以达到你想要的一致性。

如果您只想分享js和css,请查看pack:tag。您可以从apache服务器托管.js和css,设置httpd.conf以便您的webapps可以调用它,然后使用应用程序之战中的pack:标签 - 一步完成DRY和压缩。

答案 3 :(得分:0)

感谢迄今为止的回复,但我恐怕忘记提及WAR将部署在彼此完全隔离的不同环境中。

因此,在实际应用程序旁边部署一个共同的WAR可能是唯一的选择。我想我会选择以下内容:

  • WAR1,WAR2包含特定于应用的内容
  • CommonWAR包含常见的东西(不开玩笑)
  • EAR1:WAR1 + CommonWAR,将部署在env1
  • EAR2:WAR2 + CommonWAR,将部署在env2

答案 4 :(得分:0)

<强>更新

是的,我又来了。我实际上改变了主意(再次:))。我目前正在尝试(在这里更谨慎):

  • (通用)WAR:包含应用程序,常见(大部分)+某些特定内容
  • EAR1:env1的CommonWAR +特定配置文件
  • EAR2:env2的CommonWAR +特定配置文件

WAR会选择配置文件。它位于EAR类路径上,只包含一个带有值的属性“application”。然后,单个WAR将在适当的位置使用此信息来区分两个应用程序(配置,样式表,......)。

使用我的EAR1 = CommonWAR + WAR1,EAR2 = CommonWAR + WAR2的解决方案,如果不使用网址(例如使用iText生成的PDF文档中的图像),在CommonWAR中查找静态资源太困难或不可能。

答案 5 :(得分:0)

如何将css和js放在类路径中并使用servlet提供它们?然后你可以将公共资源构建为一个jar,那个jar甚至可以包含servlet(资源调度程序,如果你愿意的话),war文件可以包含WEB-INF / lib文件夹中的jar文件。