Eclipse:如何让多个动态Web项目贡献到单个WAR文件中?

6
我现在的情况是,我希望能够在Eclipse中拥有一个Web项目,其中WebContents文件夹不仅来自单个动态Web项目,还来自多个项目的合并。
例如,如果项目A中有"a.jsp",而项目B中有"b.jsp",那么我希望最终在Web容器中只有一个Web应用程序,其中"a.jsp"和"b.jsp"位于同一文件夹中。最好能够像这样合并所有文件,而不仅仅是JSP文件。
这是为了能够拥有我们应用程序的核心版本,并能够轻松处理客户特定的更改。
我知道可以通过适当的Ant魔法来实现这一点,但我们希望拥有适用于我们当前基于Eclipse的开发流程的解决方案。我们将在Java类上使用JSR-330依赖注入,本质上我想要的是像依赖注入一样,但不仅仅是针对类,而是任何资源。
Eclipse能做到吗?
如果Eclipse不能做到,那么EAR部署是否合适?目前我只有WAR的经验。
4个回答

1
如果使用Maven是一个选择的话,那么Maven的覆盖功能在这里将非常完美,并且理论上应该由m2eclipse插件支持。但是我对此没有任何经验,可能会有一些问题(参见MNGECLIPSE-599),所以这需要进行一些测试。
然而,MNGECLIPSE-599的评论非常有趣,尤其是这个:
“对于这个问题有什么解决方案吗?我们整个团队已经转向Netbeans进行WAR开发,因为这个问题。我们基本上在等待Servlet 3.0来解决这个问题(Servlet 3.0将有效地减少我们在Maven中进行覆盖的需求)。我们公司非常注重减少复制粘贴,所以我们使用覆盖来管理在我们的应用程序中必须共享的WAR媒体。”

对于我来说,Java EE 6 如何使覆盖变得过时并不十分清晰(通过 Web Fragments?),但事实是{{link1:Eclipse 的带有 Java EE 6 支持的 WTP 版本已经推迟到2010年6月}}。因此,在那之前,您需要额外的工具(例如 Maven 覆盖)或者可能要考虑切换到 NetBeans。


除非我们绝对、不可避免地必须使用,否则Maven不是一个选择。我们对Maven的生活方式没有兴趣 :)选择JEE6的原因是我们希望将Web服务堆栈、依赖注入和JSF 2.0推入容器中,而不是在WAR中部署适当的实现。从我今天的调查来看,我认为现在还不是时候。 - Thorbjørn Ravn Andersen
谢谢提到Servlet 3.0来解决问题。我会研究一下的。 - Thorbjørn Ravn Andersen
我们迁移到了Maven,最终确实做到了这一点。谢谢。 - Thorbjørn Ravn Andersen
注意,m2e需要先变得足够好。这在过去的一年内已经发生了。 - Thorbjørn Ravn Andersen

1

我有一个类似的用例,通过使用Maven(正如Pascal建议的那样)成功解决了。 我有一个根Web项目(也可以独立工作),对于每个客户,我都有一个单独的Web项目,该项目配置为与根Web项目叠加。此外,由于每个客户都有几个环境,我为每个环境创建了一个Maven配置文件(测试,生产,本地等)。我稍微记录了一下这个过程,如果您感兴趣,我不介意将文档发送给您。


我建议你写一篇博客。这是任何非微不足道的项目都需要能够处理的事情。 - Thorbjørn Ravn Andersen
有什么社区/ Maven 博客可以推荐吗?这是个好主意。 - Stijn Geukens

0
  • 您不需要改变你的“基于Eclipse的开发过程”来使用ant。只需注册一个 Ant 构建器 (右键单击项目 > 属性 > 构建器) 并将 ant 脚本集成到您的 Eclipse 进程中即可。
  • 您可以使用 Maven 的多模块选项。(Eclipse 的 Maven 插件也非常好用)
  • 您还可以使用 FileSync - 虽然不是行业标准但相当强大。它用于在 localhost 上进行开发。

以下是使用 FileSync 的一些技巧:

  • 设置要复制到目标目录(在您的情况下为Tomcat的webapps/application)的文件/文件模式/目录。因此,只要按下“保存”按钮,文件就会被复制。
  • 通过引入链接资源(首选项>工作区>链接资源),使FileSync.xxxx.prefs中的所有绝对路径变为相对路径,并在prefs文件中使用链接资源变量(我们称之为WEBAPP_HOME
  • 提交FileSync.xxxx.prefs文件
  • 告诉团队中的每个开发人员配置WEBAPP_HOME变量。因此,该设置不仅适用于一台机器,而是适用于团队中的每台机器。

你在Web应用程序开发中是否有使用Ant Builder的经验?我们目前使用Tomcat,但出于JSR-330的原因,我们考虑迁移到Glassfish。我特别关注的是周转时间-按Ctrl-S,然后在浏览器中重新加载。 - Thorbjørn Ravn Andersen
我有使用maven的经验,并且熟悉新添加的选项-FileSync。我使用maven创建构建,使用FileSync进行CTRL + S操作。它非常强大-您只需将其配置为将文件从每个项目移动到共同的目标目录即可。 - Bozho

0
我建议使用servlet 3.0的“捆绑jar文件中的资源”功能。通过此功能,您可以将Web资源(html/xhtml/css/js/jpg等)与Java类文件一起打包到jar文件中,并且Web服务器将在jar文件的“META-INF/resources”文件夹中搜索这些资源。
更多详细信息请参见:

http://alvinjayreyes.com/2013/07/28/servlet-3-0/


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接