-
실행 예제
java -cp .:/jarPathA/*:/jarPathB/abc.jar com.itpsolver.Test
-
설명
- jar 파일들에 대한 wildcard 처리는 오직 '/*' 패턴만 가능하다.
- maven으로 jar를 빌드해서 -jar 명령으로 실행했다가 classpath를 찾지 못하는 문제가 발생해서 조사해 봤더니, -jar 명령으로 실행할 경우 모든 classpath 파라미터가 무시되기 때문에, jar 패키지 안에 모든 클래스가 담겨 있어야 한다고 한다. (아웅..또 삽질했다..)
결국 -jar 옵션으로 실행하는 것은 현실적으로 어려운 케이스가 존재할 수 있기에 (JNI 참조 등) 지양하는 것이 속이 편할 듯 하다. - 패키징 및 실행에 가장 간단한 방법은, maven으로 jar를 빌드한 후 해당 jar까지 classpath에 포함시키고, -jar 옵션이 아니라 [패키지...클래스명] 으로 클래스를 직접 지정해서 java를 실행하는 것이 아닐까 한다.
대신 이럴 경우에는 같은 classpath에 중복된 클래스가 없는지 주의하자. - JNI 경로 설정이 필요할 경우 '-Djava.library.path=/[native libs 폴더명까지]' 옵션도 추가하자. (아니면 .profile에서 LD_LIBRARY_PATH 사용)
-
참고
이하 예전에 작성했던 글
java -cp [클래스패스] [클래스명(풀패키지명)]
ex) test.sh
CLASS_HOME=/home/project-workspace/webapps/webService/WEB-INF/classes
LIB=/home/project-workspace/webapps/webService/WEB-INF/lib/
java -cp $CLASS_HOME:$LIB com/kt/api/core/util/interlocktest/InterlockTest
참고
- 패키지명으로 시작되는 폴더의 상위폴더 (위에서는 ~/classes) 도 클래스패스에 포함되어야 한다.
- jar 라이브러리를 일일이 나열하지 않고 * 로 대체할 수 있다.
- 클래스패스를 나열할 때 구분자로 : 을 사용한다.