Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/373.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 不同的WAR文件、共享资源_Java_Javascript_Css_Deployment - Fatal编程技术网

Java 不同的WAR文件、共享资源

Java 不同的WAR文件、共享资源,java,javascript,css,deployment,Java,Javascript,Css,Deployment,假设您有几个应用程序共享相同的代码和大多数其他资源,但外观和感觉有所不同,一些标签会更改,等等(想想品牌)。如果每个web应用都要放在自己的WAR文件中,那么您将共享资源放在哪里 我已经使用类路径来共享类和属性文件。但是javascript和css文件呢?创建和部署一个额外WAR文件的最佳方法是将这些共享文件提供给其他应用程序所需的任何文件吗 我还想到了一个构建脚本,它可以发挥一些魔力,从一个共同的源代码中爆发出(稍微)不同的战争,但我不喜欢它,因为当您需要构建/测试/运行单个应用程序时,它会不

假设您有几个应用程序共享相同的代码和大多数其他资源,但外观和感觉有所不同,一些标签会更改,等等(想想品牌)。如果每个web应用都要放在自己的WAR文件中,那么您将共享资源放在哪里

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

我还想到了一个构建脚本,它可以发挥一些魔力,从一个共同的源代码中爆发出(稍微)不同的战争,但我不喜欢它,因为当您需要构建/测试/运行单个应用程序时,它会不必要地使事情复杂化


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

您可以在同一个EAR中部署这两场战争,并将公共资源放在EAR中。然后在web应用程序的清单中添加适当的依赖项,以链接到ear中的jar文件。

如果您不想使用ear路径,请使用tomcat等;还有一些其他方法可以实现您想要的一致性


如果您只想共享js和css,请查看。您可以从apache服务器托管.js和css,设置httpd.conf以便您的Web应用程序可以调用它,然后一步使用应用程序wars-DRY和compression中的pack:tag。

感谢您的回复,但我恐怕忘了提到,战争将部署在彼此完全隔离的不同环境中

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

  • WAR1、WAR2包含特定于应用程序的内容
  • CommonWAR包含普通的东西(不是开玩笑)
  • EAR1:WAR1+CommonWAR,部署在env1中
  • EAR2:WAR2+普通战争,将部署在env2中

更新

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

  • (通用)WAR:包含应用程序,通用(大部分)+一些特定的东西
  • EAR1:env1的CommonWAR+特定配置文件
  • EAR2:env2的CommonWAR+特定配置文件
配置文件由WAR获取。它位于EAR类路径上,只包含一个具有值的属性“application”。然后,单个WAR将在适当的情况下使用此信息来区分两个应用程序(配置、样式表等)


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

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


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

把css和js放在类路径中,用servlet为它们服务怎么样?然后,您可以将公共资源构建为一个jar,该jar甚至可以包含servlet(如果您愿意,还可以包含resource dispatcher),war文件可以包含WEB-INF/lib文件夹中的jar文件。

CommonWar在这种情况下没有任何用途。只需将每次战争中的公共资源放在它的lib目录中,或者放在EAR本身中。战争不仅仅是为了包装资源,EAR就是为了这个目的。虽然如果你简单地把它放在每一个WAR文件中,需要的配置会少一些。是的,但是如果我把公共资源放在每个WAR文件中,那么我会复制这些资源:不会这样做。如果我将公共资源放在EAR文件中,那么它必须包含依赖于这些资源的所有WAR文件:两者都不能,每个环境必须部署一个WAR。由于您在每个EAR中部署公共WAR,因此存在相同的重复,你无缘无故地将代码包装在一场战争中。CommonWAR部署在两个耳朵中,但它是同一个CommonWAR,因此它不是“为了开发”而复制的。老实说,我已经恢复到2个EAR文件和一个WAR文件,请参阅我的更新帖子:)您也可以通过这种方式发送图像