实时热更新库 hermes-jvm

Apache
Java
跨平台
2017-08-23
凌烟子墨

程序员分很多种,有测试驱动型,有IDE驱动型,有BOSS驱动型,有错误驱动型。而我就是错误驱动型大军中的一员。我开始把错误当做开发中的一种常态,是我们完成良好软件的必经之路。

作为JAVA大军中的一员,我的编程时间通常是maven-clean-package,等待,测试用例未通过,修改,继续maven...,当然你可能使用不同的工具。但是流程应该也是大同小异。渐渐地,我觉得这个流程是在浪费我的生命。因为很多时候,我只是修正一个小的错误,我不得不运行全套的test,我知道这些testcase中绝大部分都会通过的,但是我还是不得不运行。能写出测试用例的场景还好,更烦的是,需要重新启动程序的场景,maven-clean-package,restart,就这样5分钟就过去,也许我只是想看看几行代码的修改。这种情况每天都在发生,我觉得是时候改变一下我的编程方式了,于是我写实时热更新的库。

这个库我叫做Hermes,取自希腊神话中的赫尔墨斯。使用这个库,一共只有一个简单的API:create示例代码如下:

package com.lvonce;

import static com.lvonce.hermes.EntityFactory.*;

public class App {
    public static void main(String[] args) throws Exception {
		IFoo foo1 = create(IFoo.class, "com.lvonce.JavaFoo");
		IFoo foo2 = create(IFoo.class, "com.lvonce.KotlinFoo");
		IFoo foo3 = create(IFoo.class, "com.lvonce.GroovyFoo");
		Runnable func = new Runnable() {
			public void run() {
				while (true) {
					System.out.println(foo1.hello("msg"));
					System.out.println(foo2.hello("msg"));
					System.out.println(foo3.hello("msg"));
					try {
						Thread.sleep(1000);
					} catch (Exception e) {
						e.printStackTrace();
					}
				}
			}	
		};
		new Thread(func).start();
    }
}

其中,IFoo是一个接口,JavaFoo是java的实现,KotlinFoo是kotlin的实现,GroovyFoo是groovy的实现。使用create创建对象后,你就可以自由的修改相应的.java .kt .groovy文件代码。你将看到程序中的hello被实时热更新了。这就这个库为你节省时间的地方,你可以像写脚本一样享受实时更新,实时看到变化结果的编程体验。没错你在写静态编译的jvm程序。希望这个有点小黑魔法的库能给大家带来方便。

源码地址:https://github.com/thegenius/hermes

项目里有完整的使用示例,在example目录下,可以直接maven clean package运行。

欢迎各种反馈,我喜欢听见你们使用后的声音,因为这会让我觉得开源是有意义的!

加载中

评论(0)

暂无评论

暂无资讯

暂无问答

常见Java开源JMS消息中间件及特性简介

JMS开源消息中间件有很多,本文对常见的几种进行了列举和简单比较,希望对MOM选型的个人和企业有所帮助。 mom4j mom4j是一个完全实现JMS1.1规范的消息中间件并且向下兼容JMS1.0与1.02.它提供...

2012/06/26 09:47
446
0
常见Java开源JMS消息中间件及特性简介

JMS开源消息中间件有很多,本文对常见的几种进行了列举和简单比较,希望对MOM选型的个人和企业有所帮助。 mom4j mom4j是一个完全实现JMS1.1规范的消息中间件并且向下兼容JMS1.0与1.02.它提供...

2014/08/18 17:09
24
0
Java实例教程

Java当前日期/时间 Java将字符串转换为日期 Java当前工作目录 Java正则表达式 Java立方体 编译并执行Java Online 用于连接两个数组的Java程序 Java添加两个数组 字符串的Java字符 Java多字符...

11/02 10:48
6
0
JVM -verbose参数详解(转)

转自:http://www.javaranger.com/archives/367 java -verbose[:class|gc|jni] 在输出设备上显示虚拟机运行信息。 1.java -verbose:class 在程序运行的时候有多少类被加载!你可以用verbose...

2014/12/04 22:33
3.9K
1
41 Websites Every Java Developer Should Bookmark

41 Websites Every Java Developer Should Bookmark Category - Java News Oracle Technology Network - java.sun.com Well, this is the best place to start with! Being an official Java...

2014/02/21 08:49
36
0
编程字典-Java学习线路图

Java学习线路图 Java教程 Java 教程 Java 简介 Java 开发环境配置 Java 基础语法 Java 对象和类 Java 基本数据类型 Java变量类型 Java修饰符 Java运算符 Java循环结构 Java分支结构 Java Num...

10/10 17:41
3
0
Ubuntu 13.10 64位下安装配置 JDK 7

第一步:下载 jdk-7u45-linux-x64.tar.gz wget -c http://download.oracle.com/otn-pub/java/jdk/7u45-b18/jdk-7u45-linux-x64.tar.gz 或者直接下载:http://download.oracle.com/otn-pub/ja...

2014/03/24 18:19
2.4K
0
JDBC十佳实践

Java程序员的JDBC十佳实践 Java JDBC 最佳实践 JDBC Best Practices are some coding practices which Java programmer should follow while writing JDBC code. As discussed in how to co...

2014/09/18 17:28
32
0
[Java] JAVA和JVM运行原理

JVM是java的核心和基础,在java编译器和os平台之间的虚拟处理器。它是一种利用软件方法实现的抽象的计算机基于下层的操作系统和硬件平台,可以在上面执行java的字节码程序。 编译器负责把Jav...

2014/03/12 10:54
214
0
Java JDBC实例

了解如何在Java编程中使用JDBC。下面是最常用的例子: JDBC如何与数据库建立连接? JDBC如何创建,编辑和使用Java的alter table? JDBC如何显示数据库表的内容是什么? JDBC如何更新,编辑和...

2014/04/02 21:11
57
0

没有更多内容

加载失败,请刷新页面

返回顶部
顶部