programing tip

명령 줄에서 JAR 파일을 실행하고 클래스 경로를 지정합니다.

itbloger 2020. 8. 13. 07:58
반응형

명령 줄에서 JAR 파일을 실행하고 클래스 경로를 지정합니다.


JAR 파일을 컴파일 하고 매니페스트에 Main-Class를 지정했습니다 (Eclipse Export 기능 사용). 내 종속성은 모두 레이블이 지정된 디렉토리에 lib있습니다. lib/*클래스 경로로를 사용해야 함을 지정하는 동안 JAR 파일을 실행하는 방법에 대한 직접적인 대답을 얻을 수없는 것 같습니다 .

난 노력 했어:

]$ java -jar -cp .:lib/* MyJar.jar
]$ java -cp .:lib/* -jar MyJar.jar
]$ java -cp .:lib/* com.somepackage.subpackage.Main

기타...

각각 다음과 같은 오류가 발생합니다.

Error: Could not find or load main class ....

또는 NoClassDefFoundError라이브러리를 찾을 수 없음을 나타냅니다.

심지어 JAR 파일을 다시 만들고 lib디렉토리와 내용을 포함 했지만 여전히 주사위가 없습니다.

명령 줄에서 JAR 파일을 실행하고 사용할 클래스 경로를 지정하려면 어떻게해야합니까?


지정 -jar하면 -cp매개 변수가 무시됩니다.

에서 문서 :

이 옵션을 사용하는 경우 JAR 파일은 모든 사용자 클래스의 소스이며 다른 사용자 클래스 경로 설정은 무시됩니다.

또한 필요한 jar 파일을 다른 jar 파일에 "포함"할 수 없습니다 (그 내용을 추출하고 .class 파일을 jar 파일에 넣어야합니다).

두 가지 옵션이 있습니다.

  1. lib디렉토리의 모든 jar 파일을 매니페스트에 포함 (상대 경로를 사용할 수 있음)
  2. 다음을 사용하여 명령 줄에서 jar를 포함한 모든 것을 지정 합니다 -cp.
    java -cp MyJar.jar:lib/* com.somepackage.subpackage.Main

jar 파일을 실행하고 다음과 같이 클래스 경로를 지정합니다.

java -cp <jar_name.jar:libs/*> com.test.App

jar_name.jar 실행하려는 JAR의 전체 이름입니다.

libs/* 종속성 JAR의 경로입니다.

com.test.Appmain(String[])메소드 가있는 JAR에서 클래스의 완전한 이름입니다.

jar 및 종속 jar에는 실행 권한이 있어야합니다.


유닉스 쉘에서 다음을 수행 할 수 있습니다.

java -cp MyJar.jar:lib/* com.somepackage.subpackage.Main

Windows PowerShell에서 다음을 수행 할 수 있습니다.

java -cp "MyJar.jar;lib\*" com.somepackage.subpackage.Main

또는 원하는 경우 매니페스트를 사용하여 클래스 경로 및 기본 클래스를 -cp지정하면 기본 클래스 를 사용 하거나 지정할 필요가 없습니다 . 귀하의 경우에는 다음과 같은 줄이 포함됩니다.

Main-Class: com.test.App
Class-Path: lib/one.jar lib/two.jar

안타깝게도 매니페스트에서 각 jar의 철자를 입력해야합니다 (한 번만 수행하는 것만 큼 큰 문제가 아닙니다. 스크립트를 사용하여 파일을 빌드하거나 ANT, Maven 또는 Gradle과 같은 빌드 도구를 사용할 수 있습니다). 그리고 참조는 .NET Framework를 실행하는 상대 또는 절대 디렉토리 여야합니다 java -jar MyJar.jar.

그런 다음

java -jar MyJar.jar

참고 URL : https://stackoverflow.com/questions/18413014/run-a-jar-file-from-the-command-line-and-specify-classpath

반응형