hermes-jvm

实时热更新库
授权协议 Apache
开发语言 Java
所属分类 程序开发、 其他开发相关
软件类型 开源软件
地区 国产
投 递 者 爱唯
操作系统 跨平台
开源组织
适用人群 未知
 软件概览

程序员分很多种,有测试驱动型,有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运行。

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

  • Hermes与开源的Solr、ElasticSearch的不同 谈到Hermes的索引技术,相信很多同学都会想到Solr、ElasticSearch。Solr、ElasticSearch在真可谓是大名鼎鼎,是两个顶级项目,最近有些同学经常问我,“开源世界有Solr、ElasticSearch为什么还要使用Hermes?” 在回答这个问题之前,大家可以思考一个问题,既然已经有了Oracle、Mysq

 相关资料
  • 由于 imi 基于 Swoole 常驻内存,所以 PHP 的一大特点热更新就没有了。 为此,imi 中实现了业务代码的热更新,方便开发调试、动态部署,支持平滑重载。 有了热更新,开发时只需要保存代码,短短几秒甚至一瞬间,刷新页面,就可以立即看到效果! 配置 imi 默认开启了热更新,如果需要关闭或者个性化设置请看下文: 热更新通过配置文件中的beans节配置。 详见下面的注释: 'hotUpdat

  • “热更新”不不是简单地在您编辑文件时重新加载页面。开启着热更新,当你编辑一个*.vue 文件,这个组件所有的实例会在不刷新界面的情况下更新。 它甚至保留应用程序和这些组件相对应的当前状态!当你调整组件的模板或样式时,这大大提高了开发的体验。 当使用vue-cli构建项目时,热更新即可启用。

  • ConfigMap是用来存储配置文件的kubernetes资源对象,所有的配置内容都存储在etcd中,下文主要是探究 ConfigMap 的创建和更新流程,以及对 ConfigMap 更新后容器内挂载的内容是否同步更新的测试。 测试示例 假设我们在 default namespace 下有一个名为 nginx-config 的 ConfigMap,可以使用 kubectl命令来获取: $ kube

  • 应用更新部署无需reload或者restarthi-nginx。hi-nginx-java能根据全局配置 route { lrucache { reflect { expires = 300 size = 1024 } } } 自动实现热更新。关键值由"route.lrucache.reflect.e

  • 目标 建立一个lesson2项目,内容与上一节的lesson1项目一致,当用浏览器访问http://localhost:8080/index.html时,修改任一html、css、js、图片文件,页面都会自动刷新。 挑战 在原项目的基础上,将‘hello world’修改成‘你好 世界’、字体颜色修改成#ccc、并在2秒之后渐隐,浏览器页面http://localhost:8080/index.h

  • 问题内容: 如果我正在设计一个关于排序算法的测试,是否可以这样做以避免JVM预热?谢谢! 问题答案: JVM预热通常是指JVM查找代码的这些部分并将热点和JIT花费的时间。如果您运行实际测试几百次(我相信实际上是几千次),那么您应该相当不错。 但是,您应该知道,即使这样做,也无法保证。您必须对特定的JVM进行试验,以弄清关键部分被JIT之前必须要做的工作等等。 在这个小案例研究中,JIT编译在17