如何使用dcevm + hotswapagent

时间:2017-06-12 21:03:52

标签: java tomcat8 dcevm hotswapagent

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

  1. 将DCEVM设置为jdk1.8.0_112使用的altjvm 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.properties包含WEB-INF/classes
  4. 在我的hotswap-agent.properties文件中,我在我的eclipse工作区中将extraClasspath属性设置为项目的bin文件夹。我还设置了autoHotswap=true(无论调试器是否附加,我都想让代码热交换。)

    通过这种设置,我在构建eclipse时无法让Tomcat对更改作出反应(它设置为自动构建)。我错过了一些让它起作用的东西吗?

    旁注 - 我基本上完成了与JRebel完全相同的事情,所以我知道它至少是可能的。我只是想看看我是否可以使用所有开源工具。提前谢谢!

2 个答案:

答案 0 :(得分:0)

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

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

请下载最新的HA版本。

答案 1 :(得分:0)

您可以在conf / Catalina / localhost下为上下文创建文件,并在使用Eclipse Build自动更改类时使Tomcat重新加载类。

对于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>