기존 Clojure 지원을 추가 할 Tomcat에서 Java Webapp를 실행하고 있습니다. 당분간, 나는 Clojure 소스 파일을 클래스 패스의 리소스로 포함시키고 이것을 clojure.lang.RT
을 통해 호출 할 뿐이다. 원시적이지만 잘 작동합니다.Tomcat에서 Clojure 코드 다시로드
그러나 Tomcat의 WebappClassLoader
캐시 리소스는 Clojure가 소스 코드를 검색하고 컴파일하는 데 사용하는 getResourceAsInputStream()
을 통해 검색 한 것으로 나타났습니다. 즉, (require 'my-ns :reload)
을 실행하면 디스크에 업데이트 된 파일이 있어도 파일의 캐시 된 버전 만 다시로드됩니다. Clojure 파일의 캐싱을 피하거나 피하는 방법이 있습니까?
가장 좋은 결과는 WebappClassLoader.resourceEntries
에서 반사를 사용하여 끔찍한 인 항목을 수동으로 제거하는 것입니다.
나는 뭔가를 놓쳤을 것입니다.
"Jetty/Glassfish/JBoss 사용", "Tomcat 재시작"등의 답변은 내가 찾고있는 것과 다릅니다.
감사 Chas. 나는 이것을 조금 생각해야 할 것입니다. 'lib'에 물건을 넣는 것이 그렇게 편하지 않습니다. '* use-context-classloader *'가 다른 것들을 망쳐 놓지 않고 영향을 줄지 궁금하다. –
@DaveRay'* use-context-classloader *'는 기본적으로 true입니다. false로 설정하면로드가 Clojure 자체를로드 한 ClassLoader를 통해 라우트하게됩니다. Clojure가 webapp에서로드 된 경우 효과가 없거나 clojure.jar를'$ CATALINA_HOME/lib에 넣을 경우 '하지만 웹 응용 프로그램에서 코드를로드하려고 시도). Q : webapp에서 REPL 서버를 시작하고 연결 한 다음 그런 식으로 코드를로드하지 않는 이유는 무엇입니까? – cemerick
감사. 어쩌면 난 단지 충분히 REPL 서버를 사용하는 방법에 창조적이 아니에요 :) 내가 디스크에 여러 파일에 걸쳐 코드 무리가 있다고 가정 해보십시오.나는 repl 서버를 실행하면서 Tomcat을 시작한다. 어떻게 그 코드를 모두 얻을 수 있는가? –