2

我正在尝试在我的机器上的 Tomcat 上设置 java 类热交换,但未我的 IDE (Eclipse) 中配置。在所有示例中,我都可以找到 Tomcat 服务器在 Eclipse 中运行。是否可以在外部 tomcat 上使用 DCEVM+HotSwapAgent 进行代码热交换?这是我到目前为止所做的:

  1. 将 DCEVM 设置为 altjvm 以供jdk1.8.0_112使用 DCEVM-light-8u112-installer.jar
  2. 更新了 Tomcat 的启动以包含以下内容:set JAVA_OPTS=-XXaltjvm=dcevm -javaagent:<path-to>hotswap-agent-1.0.jar %JAVA_OPTS%
  3. 部署了我的应用程序,war其中包括hotswap-agent.propertiesWEB-INF/classes

在我的hotswap-agent.properties文件中,我已将该extraClasspath属性设置为我的binEclipse 工作区中的项目文件夹。我也设置autoHotswap=true了(无论是否附加了调试器,我都希望进行代码热插拔)。

使用此设置,当我在 eclipse 中构建(它设置为自动构建)时,我无法让 Tomcat 对更改做出反应。我错过了一些东西来让它工作吗?

旁注 - 我已经用 JRebel 完成了与上述完全相同的事情,所以我知道这至少是可能的。我只是想看看我是否可以让它与所有开源工具一起工作。提前致谢!

4

2 回答 2

0

这个有可能。请检查您是否已extraClasspath正确设置 - 编译一个文件(检查是否在 extraClasspath 上创建了新版本的 .class 文件)并重新启动 tomcat 而不部署新的 WAR。如果未应用更改,则 extraClasspath 设置不正确。

DEBUG 级别还应该提供有关 rousources 的更多详细信息 - 应该有一行类似于Registering resource listener on classpath URI {}

请下载当前的 HA 版本。

于 2018-05-16T18:55:36.810 回答
0

您可以在 conf/Catalina/localhost 下为您的上下文创建一个文件,并让 Tomcat 在您使用 Eclipse Build Automatically 更改它们时重新加载您的类。

对于 Tomcat 8.5,your_project.xml 文件看起来像,对于其他版本的 Tomcat,请检查文档,因为它可能略有不同。

<Context docBase="/eclipse-workspace/your_project/src/main/webapp">
<Resources>
    <PostResources className="org.apache.catalina.webresources.DirResourceSet"
                   base="/eclipse-workspace/your_project/target/classes" internalPath="/" webAppMount="/WEB-INF/classes" />
    <PostResources className="org.apache.catalina.webresources.DirResourceSet"
                   base="/eclipse-workspace/your_other_project/target/classes" internalPath="/" webAppMount="/WEB-INF/classes" />
    <PostResources className="org.apache.catalina.webresources.DirResourceSet"
                   base="/eclipse-workspace/your_external_libs" internalPath="/" webAppMount="/WEB-INF/lib" />
  </Resources>
</Context>
于 2018-09-10T08:50:25.913 回答