[英]How do I recompile and reload Java source code while `lein repl` is running?
我有一个Clojure项目,我正在使用leiningen。 我也在使用tools.namespace在运行REPL时重新加载Clojure代码。 如果我想在项目中包含Java源代码,我可以在REPL运行时重新编译并重新加载吗? 这样做最方便/最动态的方法是什么? 我可以这样做,以便它与tools.namespace一起使用吗?
如今(2016->)更好的答案是使用维吉尔 。 它在后台自动监视并重新编译leiningen项目中的所有Java代码,而不是Vinyasa调用重新导入的方法。
Spring-loaded或JRebel可能就是你想要的。 请查看https://github.com/spring-projects/Spring-loaded或http://zeroturnaround.com/software/jrebel/ 。 它们都提供了一个代理,用于监视文件系统的类文件更改并更新正在运行的JVM中的类定义。 我个人使用Spring加载,但尚未与tools.namespace一起使用。 我想运行它们的关键是确保它们不冲突。 因此,如果你使用Spring加载,它应该是跟踪类文件的唯一工具,你最好不要使用aot。 如果我没记错的话,tools.namespace会阻止使用aot。
纯java方式
public class MyClassFactory {
public static MyClass newInstance() {
URLClassLoader cl =
new URLClassLoader(new URL[] {getMyClassPath()}) {
public Class loadClass(String name) {
if ("MyClass".equals(name))
return findClass(name);
return super.loadClass(name);
}
};
return (MyClass) cl.loadClass("MyClass").newInstance();
}
}
通过这种方式,您可以引导类加载器以编程方式加载类。
参考
另请参阅官方JVM服务加载器
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.