我正在尝试使用maven构建一个java程序,以便在进行更改时运行在坞编写场景和热重加载上。我在原始libvm的基础上添加了trava-jdk libvm,并在适当的位置添加了hotswapagent库。当我运行java -version时,它给了我想要的东西。
Starting HotswapAgent '/usr/local/openjdk-11/lib/hotswap/hotswap-agent.jar'
HOTSWAP AGENT: 10:18:24.771 INFO (org.hotswap.agent.HotswapAgent) - Loading Hotswap agent {1.4.0} - unlimited runtime class redefinition.
HOTSWAP AGENT: 10:18:24.992 INFO (org.hotswap.agent.config.PluginRegistry) - Discovered plugins: [JdkPlugin, Hotswapper, WatchResources, ClassInitPlugin, AnonymousClassPatch, Hibernate, Hibernate3JPA, Hibernate3, Spring, Jersey1, Jersey2, Jetty, Tomcat, ZK, Logback, Log4j2, MyFaces, Mojarra, Omnifaces, ELResolver, WildFlyELResolver, OsgiEquinox, Owb, Proxy, WebObjects, Weld, JBossModules, ResteasyRegistry, Deltaspike, GlassFish, Vaadin, Wicket, CxfJAXRS, FreeMarker, Undertow, MyBatis]
openjdk version "11.0.5" 2019-10-15
OpenJDK Runtime Environment 18.9 (build 11.0.5+10)
Dynamic Code Evolution 64-Bit Server VM 18.9 (build 11.0.5+5-202001261315, mixed mode)要实现这一点,我的dockerfile如下所示
FROM maven:latest
WORKDIR /tmp
RUN wget https://github.com/TravaOpenJDK/trava-jdk-11-dcevm/releases/download/dcevm-11.0.5%2B5/java11-openjdk-dcevm-linux.tar.gz
RUN tar -xvf java11-openjdk-dcevm-linux.tar.gz
RUN mv dcevm-11.0.5+5 /dcevm
WORKDIR /dcevm
RUN rm /usr/local/openjdk-11/lib/server/libjvm.so
RUN cp /dcevm/lib/server/libjvm.so /usr/local/openjdk-11/lib/server/
RUN cp -r /dcevm/lib/hotswap /usr/local/openjdk-11/lib/现在,我发现自己对如何在Ide上应用热重加载并正确地运行代码有点迷茫。
如果您想知道为什么我需要这样的攻击,我有一个IoT环境,它具有E2E测试,并且我希望能够快速地迭代新的测试或失败的测试,而不需要重新编译或重新启动容器。
发布于 2020-02-04 12:57:42
我没有与这种具体的热浪剂合作的经验,但总的来说,我要回答你的问题:
-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=9999默认情况下,JVM已经提供了Hotspot功能,但我认为这个库应该提供更灵活/更强大的选项。
发布于 2020-02-06 14:40:00
有一个项目HotswapDocklands专门用于在Docker中运行HotswapAgent+dcevm。它使用/extra_class_path目录到Docker目录的映射.然后,对extra_class_path中的任何文件所做的所有修改都是使用extraClassPath对dcevm进行“刷新”的。要附加调试器,必须使用jdwp运行dcevm,并从Docker公开调试器端口。
https://stackoverflow.com/questions/60055279
复制相似问题