[英]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.