2016-09-03 2 views
0

leiningen uberjar를 만들 때 classpath에 디렉토리와 외부 jar를 어떻게 추가 할 수 있는지 알고 싶습니다.leiningen uberjar - 런타임에 외부 jar 추가

이유는 jar를 배포해야하지만 라이센스 제한으로 인해 일부 종속성 (예 : jdbc 드라이버)을 uberjar로 컴파일 할 수 없기 때문입니다.

또한 jar 외부의 로깅 및 구성 속성과 같은 특정 외부 리소스를 제공하고 싶습니다.

일반적으로 자바 또는 스프링 부트에서는 적절한 명령 행 옵션을 사용하여 클래스 경로를 변경합니다. 그러나 -cp가 항아리 등을 찾지 못합니다

이 플러그인이나 적절한 플러그인을 만들 수있는 방법이 있습니까? 미리 감사드립니다.

답변

1

jar 파일을 자원으로 dev : 프로파일에 추가 할 수 있습니다. 그런 다음 클래스 경로에 추가됩니다. dev 프로필은 지역 개발 용이며 uberjar에 패키지되지 않았습니다. 링크 된대로,

java -cp no-redist/commercial-jdbc-driver.jar;your-app-uber-jar.jar main.namespace 

AFAIK -jar 플래그를 사용하여,이 jar 파일의 종속성을 사용하십시오 uberjar와 '생산'때

:profiles { 
     :uberjar {:aot :all} 
     :dev {:resource-paths ["no-redist/commercial-jdbc-driver.jar"]}} 

당신은 수동으로 다음 클래스 경로를 설정해야합니다 거기에서 언급된다. -cp와 -jar를 결합하면 작동하지 않을 수 있습니다.

또 다른 방법은 항아리 매니페스트 (META-INF/MANIFEST.MF)에 노 배포 jar 파일을 참조하는 것입니다

Class-Path: no-redist/commercial-jdbc-driver.jar 

다음은 자바 -jar 당신의-앱 동네 짱 항아리입니다. jar는 로컬 디렉토리의 폴더 no-redist/commercial-jdbc-driver.jar에서 jar 파일을 찾습니다. 다음과 같이 leinigen에 다음을 추가하십시오.

:manifest {"Class-Path" "no-redist/commercial-jdbc-driver.jar"} 
+0

나는 그것을 이해하지만 내 주요한 문제는 어떻게하면 상용 드라이버를 볼 수있는 가야? 항아리를 넣을 때마다 그것을 보지 못합니다. -cp 옵션을 사용하면 부트 로더가 무시한 것처럼 보이며 클래스를 찾을 수없는 오류가 발생합니다. 자원과 비슷하게 클래스 패스에 있기를 요청했습니다. uberjar 외부에서 아무것도 찾지 않는 것 같습니다 – ismoore999

+0

재배포 불가능한 jar로 uberjar를 실행하는 것에 대한 자세한 내용이 업데이트되었습니다. – Gamlor