"java -cp"와 "java -jar"의 차이점은 무엇입니까?
와 자바 응용 프로그램을 실행 사이의 차이 무엇 java -cp CLASSPATH
과 java -jar JAR_FILE_PATH
? 그중 하나가 Java 응용 프로그램을 실행하기 위해 다른 것보다 선호됩니까? (머신 리소스 사용량에 따라) JVM에 더 비싼 방법은 무엇입니까?
JVM이 응용 프로그램을 실행하는 동안 더 많은 스레드를 생성하게 만드는 것은 무엇입니까?
함정이 적기 때문에 Java 응용 프로그램을 시작하는 첫 번째 버전을 선호합니다 ( "클래스 경로 지옥에 오신 것을 환영합니다"). 두 번째 파일에는 실행 가능한 jar 파일이 필요하며 해당 애플리케이션의 클래스 경로는 jar의 매니페스트 내에 정의되어야합니다 (다른 모든 클래스 경로 선언은 자동으로 무시됩니다 ...). 따라서 두 번째 버전에서는 jar를 살펴보고 매니페스트를 읽고 jar가 저장된 위치에서 클래스 경로 항목이 유효한지 확인해야합니다. 피할 수 있습니다.
두 버전 모두 성능 장점이나 단점을 기대하지 않습니다. 주 스레드에 사용할 클래스와 라이브러리를 찾을 수있는 위치를 jvm에게 알려주는 것입니다.
으로 -cp
인수하면 추가 클래스 또는 컴파일 또는 실행 될 때 프로그램이 필요할 수 있다는 라이브러리의 클래스 경로 즉, 경로 (들)을 제공한다. 함께 -jar
하면 실행하고자하는 실행 JAR 파일을 지정합니다.
둘 다 지정할 수는 없습니다. 실행하려고하면 java -cp folder/myexternallibrary.jar -jar myprogram.jar
실제로 작동하지 않습니다. 해당 JAR의 클래스 경로는 -cp
인수가 아닌 매니페스트에 지정되어야합니다 .
여기 와 여기에서 이에 대한 자세한 내용을 찾을 수 있습니다 .
추신 : -cp
그리고 -classpath
동의어입니다.
사용할 때 java -cp
정규화 된 메인 클래스 이름을 제공해야합니다. 예 :
java -cp com.mycompany.MyMain
java -jar myjar.jar
jar 파일을 사용할 때 폴더의 jar 파일에 포함 된 manifest.mf를 통해 기본 클래스에 대한 정보를 제공해야합니다 META-INF
.
Main-Class: com.mycompany.MyMain
java -cp CLASSPATH는 클래스 경로에 모든 코드를 지정하려는 경우에 필요합니다. 이것은 코드 디버깅에 유용합니다.
jarred 실행 가능 형식 : java -jar JarFile
단일 짧은 명령으로 앱을 시작하려는 경우 사용할 수 있습니다. 클래스 경로 항목에서 공백으로 구분 된 jar를 사용하여 MANIFEST에서 추가 종속 jar 파일을 지정할 수 있습니다. 예 :
Class-Path: mysql.jar infobus.jar acme/beans.jar
둘 다 성능면에서 비슷합니다.
성능면에서 차이가 없습니다. java-cp를 사용하여 Java 클래스 파일을 실행하기 위해 클래스 경로에 필요한 클래스와 jar를 지정할 수 있습니다.
실행 가능한 jar 파일 인 경우. java -jar 명령을 사용하면 jvm은 jar 파일 내의 /META-INF/MANIFEST.MF 파일에서 실행해야하는 클래스를 찾습니다.
이미 말했듯이 -cp는 명령 줄에서 jvm에게 주 스레드에 사용할 클래스와 라이브러리를 찾을 수있는 위치 (클래스 경로 정의)를 알려주기위한 것입니다. -jar에서는 jar 파일 매니페스트에 정의 될 클래스 경로 및 주 클래스를 예상합니다. 그래서 다른 것은 명령 줄에서 사물을 정의하는 반면 다른 사람들은 jar 매니페스트에서 찾는 것입니다. 성능에는 차이가 없습니다. 동시에 사용할 수 없으며 -jar는 -cp를 재정의합니다.
-cp를 사용하더라도 매니페스트 파일을 확인합니다. 따라서 매니페스트에서 일부 클래스 경로를 정의하고 명령 줄에서 일부를 정의 할 수 있습니다. 이는 빌드와 함께 제공하지 않거나 제공하고 싶지 않은 타사 jar에 대한 종속성이있을 때 특히 유용합니다 (예를 들어 설치 될 시스템에 이미있을 것으로 예상). 따라서 외부 항아리를 제공하는 데 사용할 수 있습니다. 위치는 시스템마다 다를 수 있으며 다른 시스템에서 다른 버전을 가질 수도 있습니다 (그러나 동일한 인터페이스를 가짐). 이렇게하면 다른 버전으로 앱을 빌드하고 다른 시스템에서 실행할 때 명령 줄의 클래스 경로에 실제 타사 종속성을 추가 할 수 있습니다.
참고 URL : https://stackoverflow.com/questions/11922681/differences-between-java-cp-and-java-jar
'program tip' 카테고리의 다른 글
TensorFlow에서 단계와 시대의 차이점은 무엇입니까? (0) | 2020.08.15 |
---|---|
C의 기본 열거 형 값은 모든 컴파일러에서 동일합니까? (0) | 2020.08.15 |
배열 대 벡터 : 입문 유사점 및 차이점 (0) | 2020.08.15 |
matplotlib를 가져올 때 시간이 걸립니다. (0) | 2020.08.15 |
Scala 케이스 클래스 선언의 단점은 무엇입니까? (0) | 2020.08.15 |