6

我们目前使用带有内置 Maven4MyEclipse 集成和内置 J2EE 服务器支持的 MyEclipse,但希望转换为常规 Eclipse(特别是 Helios)以便能够在 Windows 上使用其 64 位安装。(MyEclipse 在 Windows 上还不支持 64 位。)

到目前为止,我已经有了一个使用 m2eclipse 和 WTP 插件的 Helios eclipse 工作原型,将我们的大型 Web 应用程序部署到 tomcat。部署有点占用处理器资源,但它可以工作并且应用程序会启动。

这里最重要的不同是依赖项目的部署方式。在我们的 MyEclipse 环境中,所有依赖项目都部署到 WEB-INF/classes 文件夹中,因此当服务器运行时,在 IDE 中对 java 类的更改只会将受影响的文件复制到服务器的 WEB-INF/classes 并将类热交换到 JVM 中,然后...繁荣 - 对服务器进行实时更改。非常适合调试。

然而,在我的 helios 转换中,所有依赖项目都获得了 JARed 并放入 WEB-INF/lib。这样做的好处是实际上看起来像我们真正的 maven 构建的生产映像的样子,但是开发环境因此受到严重的不利影响,因为热交换能力似乎完全丧失了。在这里,如果我在依赖项目中更改了一个java类,m2eclipse会重新打包JAR,看到部署的web应用程序不同步,重新发布整个应用程序。这不仅是一个问题,因为整个 Web 应用程序必须循环(坦率地说,鉴于它的大小和巨大的初始化时间,我们的应用程序做得不好),这也是 eclipse 重新发布时令人讨厌的延迟。(对于我们的应用程序,这大约需要一两分钟。)

所以我的问题是:有没有办法让依赖项目内部的更改热交换到正在运行的 JVM 并替换已部署的文件,而不会出现这种讨厌的重新发布惩罚?我假设这意味着将这些类文件部署到 WEB-INF/类,但不确定是否 (a) 可能或 (b) 作为此解决方案的一部分确实有必要。

其他人正在做什么来解决这个问题?可以解决吗?

提前致谢!

4

1 回答 1

5

我认为您正在寻找Re: WTP Tomcat hot deploy with m2eclipse中描述的解决方案:

如果您启用“不发布服务模块”选项,则会将一个特殊的 jar 添加到 Tomcat 服务器,它允许 WTP 中的 Tomcat 支持来控制 Web 应用程序的“类路径”。此外,公用事业项目不会组装到罐子中。相反,实用程序项目的 Java 输出文件夹包含在 Web 应用程序的“类路径”中,从而有效地直接为类文件提供服务。如果您禁用上下文的自动加载,并在调试模式下运行,您对类所做的更改可以热代码替换,因此不必重新加载上下文。我相信这将完成您正在寻找的东西。

为此:

  • 转到服务器视图
  • 双击您的 Tomcat 服务器以打开服务器设置
  • Server Options中,选择Serve modules without publishing选项
  • Publishing中,选择Never publish automatically选项
于 2010-08-04T17:45:58.660 回答