我想知道是否有办法将所有需要的 .jars 放在一个单独的 .war/ear 中,这样当我对代码进行微小更改时,我不必将所有库 .jars 部署到服务器?
因为每次我想测试更改/在开发期间上传 50mb(到越位的 Tomcat 服务器)并不是消磨时间的好方法。
我在 SO 上阅读的大多数主题都表明您确实需要一个自包含的 .war 文件。在这种情况下,它仅与 1 个 .war 文件共享。不确定部署描述符中的某种库引用是否可行。
最佳答案
根据Java EE Spec ,您的 .jars 应该部署到 WAR 文件中的 WEB-INF/lib
。我见过一些人破解 Tomcat 类加载器以直接从外部拉取(尤其是在 Tomcat 5+ 删除了对 CATALINA_HOME/shared/lib
的支持之后),但这有其明显的缺点。
我建议考虑更改您的部署过程而不是更改代码。您实际上可以对 appBase
进行“分解的 WAR”部署(参见 Tomcat docs ),并且只传输已更改的文件。
我为 Inedo 工作,而且我看到很多用户使用 BuildMaster 执行此操作.工作流程看起来像这样:
- 从 $/MyApp 获取最新消息
- 运行 Ant (build.xml)
- 解压MyApp.war
- 创建构建工件
- 停止 Tomcat 服务
- 将构建工件部署到服务器 (/path/appBase)
- 启动Tomcat服务
最后一步(部署构建工件)将只部署更改的文件,这将大大减少部署 50MB 工件所需的时间。
关于tomcat - 部署:将库 jar 与我自己的类分开,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18505321/