Clojure 1.2.1 / 1.3 / 1.4 'Grails 2.0.0 작동에서 생성 된 프록시가 실패합니다. 1.2.0은 괜찮습니다
Grails 2.0.0 (및 2.1.0-SNAPSHOT) 에서 Grails Clojure는 확장하는 중이며 Clojure 1.3.0으로 업데이트 하고 clojure.tools.logging을 추가하고 싶었습니다 .
Clojure의는 에서 의 로그 스트림 함수의 프록시 를 컴파일하는 동안 예외를합니다 던져 .ByteArrayOutputStream
clojure.tools.logging
ClassCastException: clojure.asm.Type cannot be cast to clojure.lang.IFn
( https://gist.github.com/a6ae681c37091a3d2379 )
나는 제거 clojure.tools.logging
하고 다음의 프록시 를 썼습니다 Object
.
(proxy [java.lang.Object] [] (toString [] "proxy's toString"))
그리고 그것은 또한 똑같은 ClassCastException
메시지를 던졌습니다 .
나는 인쇄하려고 macroexpand -1 의 프록시 와 같은 일을합니다.
Clojure 1.2.0으로 되 돌렸고 프록시가 다시 작동했습니다.
1.4.0의 여러 화신을 시도했는데 1.3.0과 동일한 동작을 나타냅니다. 1.2.1도 어떤 종류의 예외를 던지지 만 1.3.0 을려고해서 많은 시간을 보내지.
'세대 방식의 함수의 스택 트레이스 포인트 중 하나에 정의 된 하자의 형태 generate-proxy
에서 core_proxy.clj
.
나는 println
무슨 일이 일어나고 있는지 잡을 수 있는지 확인하기 위해 주변에 작은 얼룩을 추가했습니다 . 아마도이 다음은 독자에 대한 오해를 배반 할 것입니다. 그러나 그렇게하지 println
못했던 방식으로 시간을 변경했습니다. 모든 Clojure 테스트가 계속 테스트를 mvn package
통과 했지만 예외 위치와 예외 유형이 모두 변경되었습니다 .
예를 들어, println
바이트 코드 생성을 시작하기 직전에 gen-method에 단일 메서드를 추가하면 Clojure가
ClassCastException: clojure.lang.PersistentArrayMap cannot be cast to java.lang.Class
( https://gist.github.com/5a7a40929a6c4a104bd5 )
나는 println
(s) 를 어디에 두 었는지에 따라 다양한 오류를 갖는 것이 가장 널리 퍼져 있습니다.
분명히 Grails와 Clojure의 일부 내용이 여기서 맞물리지 않지만 연결이 보일 것입니다. 처음에는 ASM 비가 있습니다. Clojure가 자체 ASM 네임 스페이스를 가지고 있기 때문에 문제가 있다는 것을 알 수 없습니다. 그러나 내가 아마도 틀렸을 수도 있습니다. 나는 며칠 동안 clojure.lang.Compiler
, proxy 및 generate-proxy 를 쳐다보고 지금이 작동하도록 노력하고 거의 중단했습니다.
링크 부족에 대해 사과드립니다. 아래에서 복사하여 넣을 수 있습니다.
Grails Clojure-github.com/grails-plugins/grails-clojure
Clojure 도구 로깅 -github.com/clojure/tools.logging/blob/master/src/main/clojure/clojure/tools/logging.clj 라인 133은 '프록시
나는라는 문제 발견 CLJ-944
에 clojure.org을 . ClassCastException: clojure.lang.PersistentArrayMap cannot be cast to java.lang.Class
문제에 대한 해결책을 수 있습니다.
문제는 :
컴파일러가 clojure.lang.PersistentHashMap에 잘못된 캐스트를 제공합니다. 이 경우 .containsKey 메서드를 사용하는 가장 일반적인 인터페이스 인 clojure.lang.Associative로 캐스팅되어야합니다.
패치 1-0001-Fix-for-CLJ-944.patch
패치 2-0002-Fix-for-CLJ-944.patch
도움이되기를 바랍니다.
'IT' 카테고리의 다른 글
Angular CLI를 최신 버전으로 업그레이드하는 방법 (0) | 2020.08.15 |
---|---|
FastMM에 의해 특정 메모리 블록이 해제되지 갑자기는지 프로그래밍 방식으로 알 수있는 방법이 있습니까? (0) | 2020.08.15 |
Eclipse WTP vs sydeo,“게시하지 않고 모듈 제공” (0) | 2020.08.15 |
iOS 8.1 시뮬레이터 현지화 중단 (NSLocalizedString) (0) | 2020.08.15 |
오프라인 웹 애플리케이션 용 이미지 데이터 저장 (클라이언트 스토리지 측량 데이터베이스) (0) | 2020.08.15 |