내 프로젝트에서 tools.jar을 사용해야하지만 사용자가 이미 가지고 있기 때문에 jar 파일에 패키지하는 것이별로 의미가 없습니다. 그래서, 그것을 "동적 종속성"으로 사용할 수 있습니까? 의미, 내 코드 JAVA_HOME
에서 찾을 tools.jar
파일을 사용하여 컴파일해야하지만, 나는 그것을 함께 포장 싶지 않아요. 런타임에 이중 활성화를 사용하여 classpath에 추가하려면 사용자의JAVA_HOME
대신 사용하십시오. 예 :sbt에서 "동적 종속성"으로 tools.jar를 추가하는 방법. 그것은 가능한가?
object Main1 extends App {
val myjar = Main1.getClass.getProtectionDomain.getCodeSource.getLocation.getFile
val tools = System.getProperty("java.home").dropRight(3)+"lib/tools.jar" // drop "jre"
val arguments = Array("java", "-cp", myjar+":"+tools, "me.myapp.Main2") ++ args
val p = Runtime.getRuntime.exec(arguments)
p.getErrorStream.close
p.getOutputStream.close
}
FYI : 독립 실행 형 jar 파일의 어셈블리 플러그인을 사용하여 앱을 압축합니다.
편집 :
못생긴 솔루션 내 프로젝트에 lib 디렉토리에 tools.jar
파일을 복사하고 추가하는 것입니다 : build.sbt
에서
excludedJars in assembly <<= (fullClasspath in assembly) map { cp =>
cp filter {_.data.getName == "tools.jar"}
}
가 더 우아하게 수행 할 수 있습니다, jar 파일을 복사하지 않고? "오른쪽"tools.jar
파일을 자동으로 사용하십시오.
iv'e allready 그것을 시도했습니다 ... (BTW, 그것은 "system"이 아닌'system'입니다). 이 오류가 발생합니다 : '[오류] {파일 :/home/gilad/workspace_eclipse/app-using-tools /} root/* : update : java.lang.IllegalArgumentException : 종속성을 추가 할 수 없습니다 'com.sun # tools; 1.6 .0 '을 모듈 me.myapp # app-using-tools_2.9.2; 0.1의 구성'system '으로 설정하면이 구성이 존재하지 않기 때문에 0.1! [오류] 총 시간 : 0 초 완료 2012 년 9 월 15 일 7:54:45 PM ' –
@giladhoch에게 감사드립니다. 언급했듯이, 나는'system' 설정에 대해 확신 할 수 없었고,'compile' 또는'runtime' 설정을 테스트 해 보도록 제안했습니다. – Brett
올바른 설정은''''제공 될 것이지만, tools.jar가 어떤 메이븐 레포에 게시되지 않았기 때문에 작동하지 않을 것입니다 (개인 레포에 게시 할 수는 있지만). 게다가, 당신은 런타임 자바와 일치하는 코드에 대해 실행하고 싶을 것이다. 그래서'unmanagedJars'를 사용하는 것이 올바른 해결책입니다. –