: profiles:dev:source path["dev"] 자바 컴파일 중단

4157 단어 leiningen

묘사

이상한 행동:
프로젝트를 만들려면 다음과 같이 하십시오.
(defproject mdg/meat2 "0.1.0-SNAPSHOT"
  :main mdg.meat2
  :java-source-paths ["java"]
  :dependencies [[org.clojure/clojure "1.5.1"]]
  :profiles {:dev {:source-paths ["dev"]}}
  )
사용자를 배치합니다.dev 폴더의 clj:
(ns user
  (:require [mdg.meat2]))
고기를 넣다.src/mdg/meat2의clj.clj:
(ns mdg.meat2
  (:import TestClass))

(defn -main [& args]
  (println "Hello world!")
  (TestClass.))

java 폴더의 java 소스 코드
public class TestClass {
  public TestClass() {
    System.out.println("I don't do a whole lot.");
  }
}
lein clean && lein run

Exception in thread "main" java.lang.ExceptionInInitializerError
    at clojure.main.<clinit>(main.java:20)
Caused by: java.lang.ClassNotFoundException: TestClass
    at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
    at clojure.lang.DynamicClassLoader.findClass(DynamicClassLoader.java:61)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:425)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
    at java.lang.Class.forName0(Native Method)
    at java.lang.Class.forName(Class.java:190)
    at mdg.meat2$eval9$loading__4910__auto____10.invoke(meat2.clj:1)
    at mdg.meat2$eval9.invoke(meat2.clj:1)
    at clojure.lang.Compiler.eval(Compiler.java:6619)
    at clojure.lang.Compiler.eval(Compiler.java:6608)
    at clojure.lang.Compiler.load(Compiler.java:7064)
    at clojure.lang.RT.loadResourceScript(RT.java:370)
    at clojure.lang.RT.loadResourceScript(RT.java:361)
    at clojure.lang.RT.load(RT.java:440)
    at clojure.lang.RT.load(RT.java:411)
    at clojure.core$load$fn__5018.invoke(core.clj:5530)
    at clojure.core$load.doInvoke(core.clj:5529)
    at clojure.lang.RestFn.invoke(RestFn.java:408)
    at clojure.core$load_one.invoke(core.clj:5336)
    at clojure.core$load_lib$fn__4967.invoke(core.clj:5375)
    at clojure.core$load_lib.doInvoke(core.clj:5374)
    at clojure.lang.RestFn.applyTo(RestFn.java:142)
    at clojure.core$apply.invoke(core.clj:619)
    at clojure.core$load_libs.doInvoke(core.clj:5413)
    at clojure.lang.RestFn.applyTo(RestFn.java:137)
    at clojure.core$apply.invoke(core.clj:619)
    at clojure.core$require.doInvoke(core.clj:5496)
    at clojure.lang.RestFn.invoke(RestFn.java:408)
    at user$eval3$loading__4910__auto____4.invoke(user.clj:1)
    at user$eval3.invoke(user.clj:1)
삭제: dev 프로필, 모든 것이 정상입니다.leinjavac에서 같은 오류가 발생했습니다.

토론 #1

나는 이것이 왜 그런지 모르겠지만 자바 클래스가 가방에 없는 것과 관련이 있다고 생각한다.나도 이것이 Leiningen 자체가 아니라 Clojure의 작업 방식과 관련이 있다고 추측한다.
동시에, 나는 네가 수업을 포장할 것을 건의한다.건의해 주셔서 감사합니다.나는 이 종류를 가방에 넣으려고 했지만, 같은 문제가 여전히 존재한다.만약: dev 프로필이 없다면, 이것은 정상적으로 작동할 수 있지만, 사용자가 될 때.clj가 다른 이름 공간을 가져옵니다.이 점은 자바 컴파일을 간접적으로 파괴했다.

토론 #2

이것은 Clojure의 오류인 것 같아서 오류 메시지가 실제 문제를 덮었다.여기에서 발생한 일은

토론 #셋

작업이 자바에서 컴파일한 클로저 코드를 호출하고 있지만, 이 코드가 실행되기 전에 클로저가 먼저 실행javac하는 것입니다.(레닌겐은 이에 대해 아무런 통제권이 없다.)가져오는 파일 user.clj 에 대한 호출을 포함하기 때문에 순환 의존 항목을 만들었습니다.나는 네가 왜 이 잘못된 정보를 받았는지 모르겠다.Clojure 자체의 문제인 것 같습니다.TestClass 나는 내 환경에서 같은 일을 만났다.dev/user를 포함하는 Stuart의 "Clojure 다시 로드"워크플로우를 따르려고 합니다.clj는 작업 환경을 설정하여 나의 모든 clojure 코드를 전달할 수 있는 방식으로 가져옵니다. 이것은 나의 (컴파일되지 않은) 자바의 clojure 코드를 인용하는 것을 포함합니다.

토론 #4

이 문제는 해결되었습니까?나 자신도 같은 문제가 있다.@technomancy가 묘사한 것은 바로 나에게 일어난 일이다.

토론 #5

사용자.clj는 미묘한 메커니즘이다. 나는 개인적으로 그것을 전혀 사용하지 않는다. 여러 해 동안 각종 도구에서 반복적으로 발생한 문제 암시를 이렇게 하는 것이 현명하다.
사람들은 항상 이 파일을

토론 #6

라고 명명하고 복잡한 컴파일러에 대한 의존도를 줄여 개발자의 설정을 정상적으로 할 수 있다.
라이언은 dev.clj 옵션을 받아들였다.

좋은 웹페이지 즐겨찾기