\leiningen core\를 가져옵니다.lein이 윈도우즈에서 경로를 정확하게 안내합니다
4853 단어 leiningen
묘사
기타:Error: Could not find or load main class clojure.main
현재 윈도우즈에서 leiningen 토론 #1
을 성공적으로 컴파일할 수 있습니다. 빈칸이 있는 경로를 사용해서 테스트하십시오.이것은 Windows의 무궁무진한 문제의 근원이다.토론 #2
이렇게 할 거예요. 언뜻 보니까 번호;
도 이름의 일부일 수 있다는 걸 알았어요. (적어도 윈도우즈에서)편집: 부트 파일의 각 경로가 큰따옴표 안에 있으면 예를 들어 "c:\a;b"“c:\somefolder”;"c:\다른 세미콜론이 있는 폴더, 내부 이름"
그래서 저는
lein classpath
을 연구하여bootstrap의 명칭 주위에 더블 인덱스를 추가할 수 있는지 확인하고 있습니다.EDIT2: 윈도우즈 일괄 처리 파일이 심각하게 지연되었습니다...아니면 제 이름이 윈도우즈 일괄 처리 파일이거든요.
EDIT3: 이름에서 빈칸과
;
을 처리하기 위해 .lein-bootstrap
파일은 더블 인덱스로 둘러싸여 있고 경로 구분자로 구분된 모든 경로를 포함하고 윈도우즈에서는 ;
이 필요합니다. 현재는 이중 인덱스로 둘러싸여 있습니다.경로가 끝날 때 파일 이름의 일부분으로 ;
을 포함할 수 있지만, 더블 인덱스 "
에 있으면 ;
과 파일/폴더 이름의 빈칸도 구분할 수 없습니다.그래서 이 방면에서 나는 내가 바뀌어야 한다고 생각한다https://github.com/technomancy/leiningen/blob/master/src/leiningen/classpath.clj#L10
이렇게 하면 문자열을 연결할 때 더블 인덱스로 둘러싸인다.그러나, 나는 유닉스에서도 문제없을 뿐만 아니라, 다른 어떤 것도 파괴하지 않을 것이라고 추측할 수 있을 뿐이다.참고로
java -cp
은 java -cp "c:\a;b";"c:\somefolder";"c:\some other folder with a semicolon;inside name"
과 같은 종류의 경로를 사용할 수 있다무슨 생각 있어요?
EDIT4: 만약에 lein이 정확하게 만들어지지 않고 마스터로부터 최신lein을 가져와 컴파일해야 한다면 정확한
.lein-bootstrap
을 얻는 것은 불가능할 것 같지만 컴파일하기 위해서는 정확한 안내 프로그램이 준비되어 있어야 한다:) 더 많이 고려해야 한다.문제는 레인 가이드 파일에 더블 인덱스에 있는 모든 경로 요소가 포함되어 있지 않다는 것입니다. 그러나 이것은 문제입니다. 만약 사용자의 파일 이름에
;
이 있다면, 이것은 일괄 처리 i를 통해 실현할 수 있을 것 같습니다. 만약 이름에 빈칸만 포함된다면EDIT5: 네, 이sux:) 제 말은
;
과 파일 이름의 빈칸을 처리하는 합리적인 방법을 찾지 못했습니다. 그리고 부트 파일을 새로 고쳐야 하는지 검사할 수 없습니다. 만약 부모 폴더의 파일 이름에 lein bootstrap
이 포함될 때 만들었다면(;
).lein with-profile release uberjar
을 실행할 때 부모 폴더의 이름에 ;
이 포함되어 있는지 확인하고 lein bootstrap
을 실행하여 안내 파일을 다시 생성하는 것을 권장하지만, 사용자가 부모 폴더의 이름에 ;
이 포함되지 않도록 이름을 바꾼 후에 이러는지 확실하지 않습니다.이것은 우리가 명의로 ;
을 지지하지 않기로 결정한 것과 같다.이 상황이 감지되었을 때 안내 파일을 삭제하는 것이 작용할 수도 있습니다. 이것은 사용자가 그것을 다시 만들어야 한다는 것을 의미합니다.응, 받아들일 수 있어.토론 #셋
이 소스 코드/부트 프로그램에서 실행될 때 Windows 파일 이름의 ;
은 개인적으로 지원되지 않습니다.우리는 이것이 비소스 코드/자진 환경에서도 유효하다고 확신합니까?예를 들어 Unix 디렉토리/파일 이름은 :
을 포함할 수 있지만, 우리는 특별한 고려가 없기 때문에 작동하지 않는다. (적어도 OSX에서는 이렇다.)파일 이름 대소문자의 빈칸이 더 흔하기 때문에 지원이 필요합니다.
토론 #4
이 점을 깊이 이해해 주셔서 감사합니다!토론 #5
나는 Lein1(단지 Leiningen core가lein1 clean, install
을 실행하는 것을 보고 있기 때문에)을 사용하여 lein2 bootstrap
의 등가물을 실행할 수 있는 방법이 있는지 묻고 싶다. 왜냐하면 나는 Lein2가 필수적이라는 것을 알아차렸기 때문이다.왜냐하면 나는
release
스크립트(또는 적어도 내가 윈도우즈에서 사용하는 등효 일괄 처리)가 이곳에서 .lein-bootstrap
부분을 실행할 때마다 lein1 clean, install
을 다시 만드는 것이 현명하다고 생각하기 때문이다.https://github.com/technomancy/leiningen/blob/master/bin/release#L17나는 부트 파일이 유행이 지났고 다시 만들어야 할 때 (일반적으로 부모 폴더가 바뀌었고 LEIN 루트 폴더가 바뀌었기 때문에) 적절한 오류 메시지가 나타나지 않는다는 것을 알아차렸다
따라서 오류는 다음과 같습니다.
Exception in thread "main" java.io.FileNotFoundException: Could not locate leiningen/core/main__init.class or leiningen/core/main.clj on classpath:
at clojure.lang.RT.load(RT.java:443)
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 clojure.main$main_opt.invoke(main.clj:335)
at clojure.main$main.doInvoke(main.clj:440)
at clojure.lang.RestFn.invoke(RestFn.java:482)
at clojure.lang.Var.invoke(Var.java:431)
at clojure.lang.AFn.applyToHelper(AFn.java:178)
at clojure.lang.Var.applyTo(Var.java:532)
at clojure.main.main(main.java:37)
토론 #6
내가 원하는 것처럼 보이는 것은lein1 classpath >.lein_bootstrap
의 노선을 따라 출력이 lein2 classpath .lein_bootstrap
또는 lein2 classpath >.lein_bootstrap
과 다르고 더 많은/다른 경로가lein2와 다르다.오, 괜찮아:)
편집: 그럼에도 불구하고,lein1이 가이드를 생성하는 상황에서 uberjar는 여전히 작업을 할 수 있지만,lein2가 가이드를 생성하는 상황에 비해 uberjar는 약 366KB가 적다.그러나 컴파일할 때 오류가 없었다.
Reference
이 문제에 관하여(\leiningen core\를 가져옵니다.lein이 윈도우즈에서 경로를 정확하게 안내합니다), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://github.com/technomancy/leiningen/issues/1159텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)