spring-loaded是一个对于jvm代理运行时期改变类文件的重载(从新加载),它转换类loadtime让他们服从后从新加载。不像“热代码替换”只容许一次简单的改变JVM运行(例如更改方法体)spring-loaded容许您添加/修改/删除/字段/方法构造函数。注释类型/方法/字段/构造函数也能够修改和能够添加/删除/修改值的枚举类型。java
https://github.com/spring-projects/spring-loaded
http://repo.spring.io/release/org/springframework/springloaded/1.2.5.RELEASE/springloaded-1.2.5.RELEASE.jar
eclipse:run as --> run configurations --> arguments -->> VM arguments -javaagent:E:\repository\org\springframework\spring-load\springloaded-1.2.5.RELEASE.jar -noverify -Dspringloaded=verbose 详细描述: -javaagent: 配置java代理使用下载后的jar包路径 -noverify: 禁用字节码验证 -Dspringloaded=verbose 显示springloaded时的详细信息
java -javaagent:E:\repository\org\springframework\spring-load\springloaded-1.2.5.RELEASE.jar -noverify Test 相似
java -javaagent:E:\repository\org\springframework\spring-load\springloaded-1.2.5.RELEASE.jar -noverify -Dspringloaded=watchJars=main.jar main.jarlinux
/** * 类Test.java的实现描述:TODO 类实现描述 * @author Administrator 2016年7月4日 下午4:55:59 */ public class Test { public static void main(String[] args) throws InterruptedException { while(true) { try { println(); Thread.sleep(1000); } catch (Throwable e) { e.printStackTrace(); } } } public static void println() { System.out.println("112222221222222"); } }
改变为git
/** * 类Test.java的实现描述:TODO 类实现描述 * @author Administrator 2016年7月4日 下午4:55:59 */ public class Test { public static void main(String[] args) throws InterruptedException { while(true) { try { println(); Thread.sleep(1000); } catch (Throwable e) { e.printStackTrace(); } } } public static void println() { System.out.println("test replace jar"); } }
PS:实测在window下无用 手上无linux机器待测试