저는 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과 관련이있을만한주의가 필요한 사항이 있습니까?
[이슈 설정] (https://www.jetbrains.com/help/idea/working-with-artifacts.html#artifact_configs)에서이 라이브러리가 실제로 병에 포장되어 있는지 확인하십시오. 거기 보이십니까? – Andrey
@andrey 아니, 거기에 나와 있지 않습니다. 다른 모든 의존성은'Extracted 'scala-reflect.jar'와 같이 자동으로 추가됩니다.'Extract into Output Root'와 함께 사용 가능한 요소 목록에서 그것을 선택하면, Jar가 실행 가능합니다, 감사합니다! 질문 :이 작업을 수동으로 수행해야하는 이유는 무엇입니까? – Carsten
SBT 프로젝트에서 이슈 구성이 build.sbt 파일 (관련 요청 : https://youtrack.jetbrains.com/issue/SCL-9955)과 자동 동기화되지 않습니다. 이제는 Gradle 또는 Maven과 동일합니다. IDE는 이슈를 생성 할 때 자동으로 모든 종속성을 추가합니다. 종속성 구성을 수정 한 후 이슈 설정을 수동으로 조정해야합니다. – Andrey