2014-07-08 5 views
1

clj-index 라이브러리에서 이상한 동작이 발생합니다. 나는 그것을 얼마 동안 테스트 해왔고, REPL로 프로젝트를 컴파일 할 때 모든 것이 완벽하게 그리고 예상대로 진행되고있었습니다. 나는 clj-index 라이브러리를 사용하기 시작할 때까지 항상 내 응용 프로그램에 대한 일Clojure : RECL로 컴파일 할 때 NoClassDefFoundError가 발생했습니다.

lein ring uberwar 

: 내가 사용 WAR 파일 내 응용 프로그램을 패키지하려고 할 때

이슈

시작했다.

내가 Leiningen에서 점점 오전 오류 :

Exception in thread "main" java.lang.NoClassDefFoundError: clj_index/core$find_L 
(wrong name: clj_index/core$find_l), compiling:(listener.clj:1:5) 
     at clojure.lang.Compiler$InvokeExpr.eval(Compiler.java:3558) 
     at clojure.lang.Compiler.compile1(Compiler.java:7226) 
     at clojure.lang.Compiler.compile1(Compiler.java:7216) 
     at clojure.lang.Compiler.compile1(Compiler.java:7216) 
     at clojure.lang.Compiler.compile(Compiler.java:7292) 
     at clojure.lang.RT.compile(RT.java:398) 
     at clojure.lang.RT.load(RT.java:438) 
     at clojure.lang.RT.load(RT.java:411) 
     at clojure.core$load$fn__5066.invoke(core.clj:5641) 
     at clojure.core$load.doInvoke(core.clj:5640) 
     at clojure.lang.RestFn.invoke(RestFn.java:408) 
     at clojure.core$load_one.invoke(core.clj:5446) 
     at clojure.core$compile$fn__5071.invoke(core.clj:5652) 
     at clojure.core$compile.invoke(core.clj:5651) 
     at user$eval5.invoke(form-init8409087376793750134.clj:1) 
     at clojure.lang.Compiler.eval(Compiler.java:6703) 
     at clojure.lang.Compiler.eval(Compiler.java:6692) 
     at clojure.lang.Compiler.eval(Compiler.java:6693) 
     at clojure.lang.Compiler.load(Compiler.java:7130) 
     at clojure.lang.Compiler.loadFile(Compiler.java:7086) 
     at clojure.main$load_script.invoke(main.clj:274) 
     at clojure.main$init_opt.invoke(main.clj:279) 
     at clojure.main$initialize.invoke(main.clj:307) 
     at clojure.main$null_opt.invoke(main.clj:342) 
     at clojure.main$main.doInvoke(main.clj:420) 
     at clojure.lang.RestFn.invoke(RestFn.java:421) 
     at clojure.lang.Var.invoke(Var.java:383) 
     at clojure.lang.AFn.applyToHelper(AFn.java:156) 
     at clojure.lang.Var.applyTo(Var.java:700) 
     at clojure.main.main(main.java:37) 
Caused by: java.lang.NoClassDefFoundError: clj_index/core$find_L (wrong name: cl 
j_index/core$find_l) 
     at java.lang.ClassLoader.defineClass1(Native Method) 
     at java.lang.ClassLoader.defineClass(ClassLoader.java:760) 
     at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:14 
2) 
     at java.net.URLClassLoader.defineClass(URLClassLoader.java:455) 
     at java.net.URLClassLoader.access$100(URLClassLoader.java:73) 
     at java.net.URLClassLoader$1.run(URLClassLoader.java:367) 
     at java.net.URLClassLoader$1.run(URLClassLoader.java:361) 
     at java.security.AccessController.doPrivileged(Native Method) 
     at java.net.URLClassLoader.findClass(URLClassLoader.java:360) 
     at java.lang.ClassLoader.loadClass(ClassLoader.java:424) 
     at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308) 
     at java.lang.ClassLoader.loadClass(ClassLoader.java:357) 
     at clj_index.boyer_moore__init.load(Unknown Source) 
     at clj_index.boyer_moore__init.<clinit>(Unknown Source) 
     at java.lang.Class.forName0(Native Method) 
     at java.lang.Class.forName(Class.java:340) 
     at clojure.lang.RT.loadClassForName(RT.java:2093) 
     at clojure.lang.RT.load(RT.java:430) 
     at clojure.lang.RT.load(RT.java:411) 
     at clojure.core$load$fn__5066.invoke(core.clj:5641) 
     at clojure.core$load.doInvoke(core.clj:5640) 
     at clojure.lang.RestFn.invoke(RestFn.java:408) 
     at clj_index.core__init.load(Unknown Source) 
     at clj_index.core__init.<clinit>(Unknown Source) 
     at java.lang.Class.forName0(Native Method) 
     at java.lang.Class.forName(Class.java:340) 
     at clojure.lang.RT.loadClassForName(RT.java:2093) 
     at clojure.lang.RT.load(RT.java:430) 
     at clojure.lang.RT.load(RT.java:411) 
     at clojure.core$load$fn__5066.invoke(core.clj:5641) 
     at clojure.core$load.doInvoke(core.clj:5640) 
     at clojure.lang.RestFn.invoke(RestFn.java:408) 
     at clojure.core$load_one.invoke(core.clj:5446) 
     at clojure.core$load_lib$fn__5015.invoke(core.clj:5486) 
     at clojure.core$load_lib.doInvoke(core.clj:5485) 
     at clojure.lang.RestFn.applyTo(RestFn.java:142) 
     at clojure.core$apply.invoke(core.clj:626) 
     at clojure.core$load_libs.doInvoke(core.clj:5524) 
     at clojure.lang.RestFn.applyTo(RestFn.java:137) 
     at clojure.core$apply.invoke(core.clj:626) 
     at clojure.core$require.doInvoke(core.clj:5607) 
     at clojure.lang.RestFn.invoke(RestFn.java:421) 
     at umbel.tagger$loading__4958__auto__.invoke(tagger.clj:1) 
     at umbel.tagger__init.load(Unknown Source) 
     at umbel.tagger__init.<clinit>(Unknown Source) 
     at java.lang.Class.forName0(Native Method) 
     at java.lang.Class.forName(Class.java:340) 
     at clojure.lang.RT.loadClassForName(RT.java:2093) 
     at clojure.lang.RT.load(RT.java:430) 
     at clojure.lang.RT.load(RT.java:411) 
     at clojure.core$load$fn__5066.invoke(core.clj:5641) 
     at clojure.core$load.doInvoke(core.clj:5640) 
     at clojure.lang.RestFn.invoke(RestFn.java:408) 
     at clojure.core$load_one.invoke(core.clj:5446) 
     at clojure.core$load_lib$fn__5015.invoke(core.clj:5486) 
     at clojure.core$load_lib.doInvoke(core.clj:5485) 
     at clojure.lang.RestFn.applyTo(RestFn.java:142) 
     at clojure.core$apply.invoke(core.clj:626) 
     at clojure.core$load_libs.doInvoke(core.clj:5524) 
     at clojure.lang.RestFn.applyTo(RestFn.java:137) 
     at clojure.core$apply.invoke(core.clj:628) 
     at clojure.core$use.doInvoke(core.clj:5618) 
     at clojure.lang.RestFn.invoke(RestFn.java:619) 
     at umbel.core$loading__4958__auto__.invoke(core.clj:1) 
     at umbel.core__init.load(Unknown Source) 
     at umbel.core__init.<clinit>(Unknown Source) 
     at java.lang.Class.forName0(Native Method) 
     at java.lang.Class.forName(Class.java:340) 
     at clojure.lang.RT.loadClassForName(RT.java:2093) 
     at clojure.lang.RT.load(RT.java:430) 
     at clojure.lang.RT.load(RT.java:411) 
     at clojure.core$load$fn__5066.invoke(core.clj:5641) 
     at clojure.core$load.doInvoke(core.clj:5640) 
     at clojure.lang.RestFn.invoke(RestFn.java:408) 
     at clojure.core$load_one.invoke(core.clj:5446) 
     at clojure.core$load_lib$fn__5015.invoke(core.clj:5486) 
     at clojure.core$load_lib.doInvoke(core.clj:5485) 
     at clojure.lang.RestFn.applyTo(RestFn.java:142) 
     at clojure.core$apply.invoke(core.clj:626) 
     at clojure.core$load_libs.doInvoke(core.clj:5524) 
     at clojure.lang.RestFn.applyTo(RestFn.java:137) 
     at clojure.core$apply.invoke(core.clj:626) 
     at clojure.core$require.doInvoke(core.clj:5607) 
     at clojure.lang.RestFn.invoke(RestFn.java:408) 
     at umbel.listener$loading__4958__auto__.invoke(listener.clj:1) 
     at clojure.lang.AFn.applyToHelper(AFn.java:152) 
     at clojure.lang.AFn.applyTo(AFn.java:144) 
     at clojure.lang.Compiler$InvokeExpr.eval(Compiler.java:3553) 
     ... 29 more 
Subprocess failed 

가 그럼 난 문제가 출처를 찾기 시작했다. /target/classes/ 디렉토리의 내용을 확인했습니다. cls_index 폴더가 만들어지고 * .class 파일로 채워진 것을 발견했습니다.

나는 다음과 같은 클래스 파일이 작성있어 볼 :

  • core$find_L$fn__3635.class
  • core$find_l$fn__3640.class
  • core$find_L.class

그러나, 나는 정말 모른다 :

  1. ㅁㅁ

주 WAR 파일을 생성 할 때 그것은 단지 문제가 왜 문제

  • 입니다에서 : 나는 또한 명확 lein clean (단지의 경우에 ...) 그러나 이것은 효과가 없습니다를 사용하여 대상 폴더

  • 답변

    1

    이 문제

    1. 라이브러리는 동일한 이름을 가진 함수를 사용하기 때문에 발생하지만, 다른 경우, 이러한 find_lfind_L있다.

      java.lang.NoClassDefFoundError: clj_index/core$find_L 
          (wrong name: clj_index/core$find_l) 
      

      는 컴파일하는 동안 하나의 케이스와 이름의 클래스 파일은 두 번째 경우와 이름의 클래스 파일로 덮어 쓰기 :

    2. 파일 시스템은 힌트는 여기

    대소 문자를 구분합니다.

    이 문제는 {:aot :all}으로 uberwar를 만들 때와 같이 AOT 컴파일을 강제하는 경우에만 발생합니다.

    +0

    @ a-webb 글쎄, 내 질문 중 하나에 대한 적절한 답변을 주셔서 감사합니다! 내가 Windows에 있기 때문에 그 의미가 있습니다. 그 문제를 해결하기 위해 할 수있는 일이 있습니까? 아마 clj-index의 코드를 수정하면 될까요? – Neoasimov

    +0

    @ a-webb 소스에서 직접 함수 이름을 수정하면 완벽하게 작동했습니다. 실제로 발생한 문제였습니다. 명확한 설명 주셔서 감사합니다! – Neoasimov

    +1

    @Neoasimov 또한 'profile.clj'파일 대신 라이브러리에 대한 AOT 컴파일을 해제 할 수 있습니다. '{: aot []}'로 시작하십시오. –