2009-09-23 4 views
5

커맨드 라인에서 jarjar를 사용하여 간단한 스칼라 프로그램과 scala 런타임 라이브러리를 결합하는 데 문제가 있습니다. 그러나, 그들이 작동하지 않는 결합명령 행에서 jarjar를 사용하는 방법은 무엇입니까?

$ java -jar ~/Desktop/saug/jarjar-1.0.jar find jar BCT.jar scala-library.jar 
/home/schani/Work/scala/bct/BCT.jar -> /home/schani/Work/scala/bct/scala-library.jar 

:

jarjar 올바르게 의존성을 감지 나는 아직도 얻을

$ CLASSPATH=./scala-library.jar java -jar ~/Desktop/saug/jarjar-1.0.jar process rules.jjl BCT.jar BCTS.jar 

jar 파일 스칼라 - library.jar에 따라 달라집니다. CLASSPATH 변수를 추가하는지 여부에 따라 차이가 없습니다. 내 규칙 .jjl 파일은 다음과 같습니다.

keep BCT 

어떻게해야합니까?

+1

제다이 마술입니다. 잘하면 그것은 당신을 너무 많이 깨우 치지 않습니다. ..... –

답변

1

java "-jar"옵션을 사용하면 클래스 경로가 무시됩니다. 클래스 경로에 명시 적으로 기본 클래스를 지정 시도하고 "-jar"생략 :

java -cp ~/Desktop/saug/jarjar-1.0.jar:./scala-library.jar com.tonicsystems.jarjar.Main process rules.jjl BCT.jar BCTS.jar 
+0

작동하지 않습니다. –

+0

필자에게 좀 더 구체적으로 설명하자면 jar 파일이 BCT.jar 파일을 포함하고있다. 어떤 패키지의 이름도 바꾸지 않고 모든 의존성을 수집하고 싶습니다. 그래서 규칙에서 BCT.jar의 기본 클래스의 패키지와 규칙을 유지합니다. – pihentagy

0

시도가 scala.runtime.Nothing의 $ 클래스의 킵를 추가. 스칼라와 비슷한 제품 (autojar; http://autojar.sourceforge.net/en_d/index.html)을 사용할 때 이것이 필요한 것으로 나타났습니다.

+0

그 중 하나는 작동하지 않습니다. jarjar는 커맨드 라인에 지정된 입력 jar 파일에서 클래스를 가져 오는 것으로 보이지만 종속 jar에서는 가져 오지 않습니다. 그리고이를 지정하는 방법이없는 것처럼 보입니다. –

0

jarjar는 다른 항아리를 항아리에 다시 포장하지 않습니다. 하나의 jar 자체 내에서만 의존성을 바꿉니다.

여기에 설명 된 방법 Clean way to combine multiple jars? Preferably using Ant을 사용하여 모든 종속 항아리를 병에 rejar 한 다음 jarjar를 실행하여 향후 의존성 지옥을 예방하십시오.

+0

실제로, 개미 작업을 사용하여 리졸핑하는 것이 가장 이상적인 솔루션은 아닙니다. 나는이 일식 뚱뚱한 병 플러그인을 사용했습니다. 기본적으로 빈 프로젝트를 만들고 프로젝트의 빌드 경로에 모든 jar를 놓은 다음 fat-jar 플러그인 http://fjep.sourceforge.net/을 사용하여 fat jar 파일로 내 보냅니다. – yincrash

관련 문제