我正在尝试在我的计算机上的Tomcat上设置java类热交换,但在我的IDE(Eclipse)中配置了 。在所有示例中,我都可以发现Tomcat服务器是在Eclipse中运行的。是否可以在外部tomcat上使用DCEVM + HotSwapAgent进行代码热交换?这是我到目前为止所做的:
jdk1.8.0_112
使用的altjvm
DCEVM-light-8u112-installer.jar
set JAVA_OPTS=-XXaltjvm=dcevm -javaagent:<path-to>hotswap-agent-1.0.jar %JAVA_OPTS%
war
,其中hotswap-agent.properties
包含WEB-INF/classes
在我的hotswap-agent.properties
文件中,我在我的eclipse工作区中将extraClasspath
属性设置为项目的bin
文件夹。我还设置了autoHotswap=true
(无论调试器是否附加,我都想让代码热交换。)
通过这种设置,我在构建eclipse时无法让Tomcat对更改作出反应(它设置为自动构建)。我错过了一些让它起作用的东西吗?
旁注 - 我基本上完成了与JRebel完全相同的事情,所以我知道它至少是可能的。我只是想看看我是否可以使用所有开源工具。提前谢谢!
答案 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>