2017-12-12 24 views
1

저는 Intellij Idea 2017.3 (Ultimate Edition)을 사용하여 Scala/SBT 프로젝트에서 아티팩트 (실행 가능한 Jar)를 빌드합니다. 스칼라 버전은 2.12입니다. 나는 최근 Scallop에 대한 종속성을 추가 한 이후 가리비 클래스 ScallopConf JAR 파일에 있지 않기 때문에 , 나는 더 이상 JAR 파일을 실행할 수 없습니다 :IntelliJ로 작성된 이슈의 NoClassDefFoundError

$ java -jar executable.jar 
Error: A JNI error has occurred, please check your installation and try again 
Exception in thread "main" java.lang.NoClassDefFoundError: org/rogach/scallop/ScallopConf 
    at java.lang.ClassLoader.defineClass1(Native Method) 
    at java.lang.ClassLoader.defineClass(ClassLoader.java:763) 
    [...] 
Caused by: java.lang.ClassNotFoundException: org.rogach.scallop.ScallopConf 
    at java.net.URLClassLoader.findClass(URLClassLoader.java:381) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424) 
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:335) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357) 
    ... 19 more 

나는 ScallopConf 클래스가로 포장되지 않은 것을 확인할 수 있습니다 Jar 파일을 수동으로 검사하여 Jar 파일을 만듭니다. 다른 모든 종속성은 초기 또는 이후에 추가되었는지 여부에 관계없이 존재합니다.

내가 프로젝트 루트 디렉토리에있는 build.sbt 파일 종속성을 추가하는 방법입니다

libraryDependencies += "org.rogach" %% "scallop" % "3.1.1" 

이 프로젝트는 IDE 내에서 sbt compile에 모두 잘 컴파일합니다. 또한 IDE에서 제대로 실행할 수 있습니다.

IDE에서 표준 방식으로 이슈를 만들었습니다. Scallop과 관련이있을만한주의가 필요한 사항이 있습니까?

+0

[이슈 설정] (https://www.jetbrains.com/help/idea/working-with-artifacts.html#artifact_configs)에서이 라이브러리가 실제로 병에 포장되어 있는지 확인하십시오. 거기 보이십니까? – Andrey

+0

@andrey 아니, 거기에 나와 있지 않습니다. 다른 모든 의존성은'Extracted 'scala-reflect.jar'와 같이 자동으로 추가됩니다.'Extract into Output Root'와 함께 사용 가능한 요소 목록에서 그것을 선택하면, Jar가 실행 가능합니다, 감사합니다! 질문 :이 작업을 수동으로 수행해야하는 이유는 무엇입니까? – Carsten

+1

SBT 프로젝트에서 이슈 구성이 build.sbt 파일 (관련 요청 : https://youtrack.jetbrains.com/issue/SCL-9955)과 자동 동기화되지 않습니다. 이제는 Gradle 또는 Maven과 동일합니다. IDE는 이슈를 생성 할 때 자동으로 모든 종속성을 추가합니다. 종속성 구성을 수정 한 후 이슈 설정을 수동으로 조정해야합니다. – Andrey

답변

0

@Andrey가 지적한 것처럼 아티팩트 설정은 SBT 종속성이 변경 될 때 자동으로 업데이트되지 않습니다. 모든 것이 최신인지 확인하려면 해결 방법은 SBT 종속성을 업데이트 한 후 이슈를 다시 만드는 것입니다.

따라서이 문제는 특정 종속성 (이 경우에는 가리비)과 관련이 없습니다.