리눅스(or 유닉스, linux, unix)에서 자바(java) 실행(command line execute) 예제

By | 11월 4, 2021
  • 실행 예제

    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 라이브러리를 일일이 나열하지 않고 * 로 대체할 수 있다.
   - 클래스패스를 나열할 때 구분자로 : 을 사용한다.

Subscribe
Notify of
guest
0 Comments
Inline Feedbacks
View all comments