[SPRING] Classpath를 가진 Spring Boot 실행 가능한 Jar
SPRINGClasspath를 가진 Spring Boot 실행 가능한 Jar
Spring Boot를 사용하여 엔터프라이즈 소프트웨어 시스템과 상호 작용하는 소프트웨어 시스템을 구축 중입니다. 내 시스템은 해당 엔터프라이즈 시스템의 일부 jar 및 * .ini 파일에 의존하므로 Maven의 모든 종속성을 압축 할 수 없습니다. 임베디드 Tomcat으로 실행 가능한 Jar로 Spring Boot를 실행할 수 있기를 원합니다. 또한 커맨드 라인을 통해 클래스 패스를 설정할 수 있기를 바랍니다. 이렇게 무언가 같이 :
java -classpath /home/sleeper/thirdparty/lib -jar MyApp.jar
그러나 -classpath와 -jar는 공존 할 수 없습니다. 나는 "-Dloader.path"를 시도했다. 폴더 아래에있는 모든 jar 파일을로드 할 수 있었지만 폴더의 * .ini 파일과 같은 다른 파일은로드 할 수 없었습니다.
그래서 Tomcat이 내장 된 Spring 실행 가능한 jar로 작업하기 위해 -classpath를 만들 수있는 방법이 있습니까?
모든 도움을 미리 감사드립니다.
해결법
-
==============================
1.외부 라이브러리를 추가하려면 loader.path 특성을 사용할 수 있습니다.
외부 라이브러리를 추가하려면 loader.path 특성을 사용할 수 있습니다.
java -Dloader.path="your-lib/" -jar your-app.jar
최신 정보
클래스 패스에서 추가 파일을 읽어야하는 경우 응용 프로그램의 매니페스트 파일을 작성 / 변경해야합니다.
de.app.Application 클래스에서 스프링 부트 컨텍스트를 초기화한다고 가정합니다. MANIFEST.MF는 다음과 같이 표시되어야합니다.
Manifest-Version: 1.0 Main-Class: de.app.Application Class-Path: /home/sleeper/thirdparty/lib/
그리고 당신은 java -jar MyApp.jar로 앱을 시작할 수 있습니다.
MANIFEST.MF에 대한 자세한 내용은 Manifest 파일 작업 : 기본 사항을 참조하십시오.
-
==============================
2.외부 폴더에서 * .ini 파일을로드해야한다고 언급했습니다. 나는 비슷한 것을해야했고, 외부 폴더에서 CSV 파일을로드해야했습니다.
외부 폴더에서 * .ini 파일을로드해야한다고 언급했습니다. 나는 비슷한 것을해야했고, 외부 폴더에서 CSV 파일을로드해야했습니다.
내 파일 구조는 다음과 같습니다.
./myapp.jar ./config/file.csv
ResouceLoader를 사용하여 파일을로드하는 중 :
Resource res = resourceLoader.getResource("classpath:file.csv"); File csvFile = res.getFile();
스크립트 시작 :
java -Dloader.path="config" -jar your-app.jar
리소스가 "config"폴더에서 예상대로로드되지 않았습니다. 몇 가지 연구를 한 후 ZIP 레이아웃을 사용하기 위해 Maven 플러그인 구성을 변경해야한다는 것을 알게되었습니다.
<plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <configuration> <layout>ZIP</layout> </configuration> </plugin>
이것은 스프링 부트가 PropertiesLauncher를 사용하도록 지시 할 것이고, 이것은 "loader.path"로부터 외부 자원을 로딩 할 수있게 해준다.
자세한 내용은이 우수 기사를 참조하십시오.
-
==============================
3.Linux :
Linux :
java -cp MyApp.jar:/home/sleeper/thirdparty/lib -Dloader.main=myMainApplicationClass org.springframework.boot.loader.PropertiesLauncher
Windows의 경우 :
java -cp MyApp.jar;/home/sleeper/thirdparty/lib -Dloader.main=myMainApplicationClass org.springframework.boot.loader.PropertiesLauncher
이렇게하면 다른 답변과 마찬가지로 매니페스트 나 스프링 부트 메이븐 플러그인 구성이 엉망이되는 것을 피할 수 있습니다. loader.main에 기본 클래스를 지정할 수있는 PropertiesLauncher로 앱을 시작합니다. 앞에서 언급했듯이, Loader.path와 함께 PropertiesLauncher를 사용하면 어떤 이유로 리소스 파일을 클래스 경로에 추가하지 않습니다. 이 문제는 -jar 대신 -cp를 사용하여 해결됩니다.
편집하다 주석에서 피아노 사우루스 (Pianosaurus)에 언급 된 바와 같이, ";"대신 ":"을 사용하십시오. Linux의 클래스 경로에 구분 기호로 사용
from https://stackoverflow.com/questions/39716796/spring-boot-executable-jar-with-classpath by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] executeSqlScript가 PL / SQL 용 Spring 블록과 함께 실패합니다. (0) | 2019.05.11 |
---|---|
[SPRING] Spring Bean 사용자 정의 범위 JMS (0) | 2019.05.11 |
[SPRING] 봄 / JTA / JPA DAO 통합 테스트가 롤백되지 않습니까? (0) | 2019.05.11 |
[SPRING] RequestContextHolder와 같은 Response의 홀더 클래스가없는 이유는 무엇입니까? (0) | 2019.05.11 |
[SPRING] Spring 클라우드 스트림 - 애플리케이션 초기화 후 메시지 보내기 (0) | 2019.05.11 |