【问题标题】:Deployment: Separating the library jars from my own classes部署:将库 jar 与我自己的类分开
【发布时间】:2013-08-29 08:01:36
【问题描述】:

我想知道是否有办法将所有需要的 .jars 放在单独的 .war/ear 中,这样当我对代码进行微小更改时,我就不必将所有库 .jars 部署到服务器?

因为每次我想测试更改/在开发期间上传 50mb(到越位的 Tomcat 服务器)并不是消磨时间的好方法。

我在 SO 上阅读的大多数主题都表明您确实想要一个自包含的 .war 文件。在这种情况下,它仅与 1 个 .war 文件共享。不确定这是否可以通过部署描述符中的某种库引用来实现。

【问题讨论】:

  • 您是否尝试将这些 jars 放入 servlet 容器的类路径中(这可能会对其他 webapps 产生负面影响,但它可能会解决您的上传问题)? JBoss 7 使用其模块化类加载概念为此提供了解决方案。
  • 不,我没有,但我会探索这个选项

标签: tomcat deployment war ear


【解决方案1】:

根据Java EE Spec,您的.jars 应该部署到您的WAR 文件中的WEB-INF/lib。我见过一些人破解 Tomcat 类加载器以直接从外部提取(尤其是在 Tomcat 5+ 删除对CATALINA_HOME/shared/lib 的支持之后),但这有其明显的缺点。

我建议您考虑更改您的部署过程,而不是更改代码。您实际上可以对appBase(参见Tomcat docs)进行“爆炸式WAR”部署,并且只传输已更改的文件。

我为Inedo 工作,我看到很多用户使用BuildMaster 这样做。工作流程如下所示:

  1. 从 $/MyApp 获取最新信息
  2. 运行 Ant (build.xml)
  3. 解压 MyApp.war
  4. 创建构建工件
  5. 停止 Tomcat 服务
  6. 将构建工件部署到服务器 (/path/appBase)
  7. 启动 Tomcat 服务

最后一步(部署构建工件)将只部署更改的文件,这将大大减少部署 50MB 工件所需的时间。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-05-09
    • 1970-01-01
    • 2010-09-08
    • 2011-12-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多