Java는 Jar 패키지를 확장하고 로드하는 방법을 어떻게 학습합니까?

java -jar 매개변수로 애플리케이션을 실행할 때 클래스 경로를 설정하는 방법 java -jar yourJarExe.jar을 사용하여 패키지된 애플리케이션을 실행할 때 -classpath 매개변수를 설정하는 방법을 찾을 수 있으며 애플리케이션이 해당 타사 클래스를 찾을 수 없습니다. . 실제로 이는 -jar 매개변수를 사용하여 실행하면 Java VM이 모든 외부 클래스 경로를 보호하고 yourJarExe.jar의 내부 클래스만 클래스의 검색 범위로 사용하기 때문입니다.

해결책

확장성 클래스 로더

확장 클래스 로더는 일반적으로 {Java_home}\jre\lib\ext 디렉터리에 저장되며, Java 호출 시 확장 클래스 경로는 자동으로 검색된다. 항상 검색이 있을 것입니다. 이 방법으로 해결 방법은 매우 간단합니다. 사용할 모든 타사 jar 패키지를 ext 디렉터리에 복사합니다. 로딩 카테고리에 투명하게 입력됩니다.

참고: 권장되지 않습니다. 그렇지 않으면 모든 JRE를 마이그레이션하고 통합하고 동기화해야 합니다!

BootStrap 클래스 로더 확장 체계

확장된 jar 패키지를 로드하려면 -Xbootclasspath 매개변수를 사용하십시오.

Java 명령줄은 bootStrap 수준 클래스를 확장하는 쉬운 방법을 제공합니다.

-Xbootclasspath: 일반적으로 사용되지 않는 기본 핵심 Java 클래스 검색 경로를 완전히 대체합니다. 그렇지 않으면 모든 Java 핵심 클래스를 다시 작성해야 합니다(권장하지 않음!).

-Xbootclasspath/a: 핵심 클래스 검색 경로 뒤의 접미사(권장)

-Xbootclasspath/p: 접두사는 핵심 클래스 검색 경로 앞에 위치하며, 불필요한 충돌을 피하기 위해 일반적으로 사용되지 않습니다. (사용을 권장하지 않음)

구문은 다음과 같습니다. (구분 기호는 클래스 경로 매개 변수와 유사합니다. Unix는 : 숫자를 사용하고 Windows는 ; 숫자를 사용합니다. 여기서는 Unix를 예로 들어 보겠습니다.)

java -Xbootclasspath/a:/usrhome/thirdlib.jar: -jar yourJarExe.jar

사용자 클래스 확장 체계

-jar를 사용하여 실행 가능한 Jar 패키지를 실행할 때 JVM은 Jar 패키지가 있는 디렉터리를 코드베이스 디렉터리로 설정하고 모든 클래스 검색이 이 디렉터리에서 시작됩니다.

따라서 다른 타사 jar 패키지를 사용하는 경우 보다 수용 가능한 구성 가능한 솔루션은 jar 패키지의 매니페스트 확장 메커니즘을 사용하는 것입니다.

다음과 같이 진행하세요:

필요한 타사 jar 패키지를 실행 가능한 jar 또는 하위 디렉터리와 동일한 디렉터리에 복사합니다. 예를 들어 jar 패키지가 /usrhome/yourJarExe.jar에 있으면 모든 jar 패키지를 /usrhome 디렉터리 또는 /에 복사할 수 있습니다. usrhome/lib 및 유사한 하위 디렉터리.

매니페스트 파일 수정

Manifest.mf 파일에 다음 줄을 추가합니다.

클래스 경로:classes12.jar lib/thirdlib.jar

Class-Path는 실행 가능한 jar 패키지가 의존하는 키워드입니다.

Class-Path는 로컬 시스템의 CLASSPATH 환경 변수에 대한 약어입니다. 즉, 이 접두사를 사용하는 것은 jar의 모든 CLASSPATH 디렉토리에서 해당 타사 클래스/클래스 라이브러리를 검색하는 것을 의미합니다. 패키지 실행 기계.

Class-Path를 통해 자신의 jar 패키지(또는 네트워크)에 있는 jar 파일을 로드할 수 없습니다.

이론적으로 jar 릴리스 패키지에는 다른 타사 라이브러리가 포함되어서는 안 됩니다(대신 사용 지침을 통해 해당 지원 라이브러리를 얻도록 사용자에게 알려야 합니다).

특별한 요구로 인해 다른 타사 클래스 라이브러리(jar, zip, 클래스 등)를 직접 패키지하고 자체 jar 패키지에 릴리스해야 하는 경우 사용자 정의 ClassLoader를 구현하여 사용자 정의에 따라 이러한 타사 라이브러리를 로드해야 합니다. 의도 클래스 라이브러리.

기사 출처: 네트워크 저작권은 원저작자에게 있습니다.

위 내용은 상업적인 목적이 아니며, 지적 재산권 문제와 관련된 경우 편집자에게 연락하시면 즉시 처리해 드리겠습니다.

Supongo que te gusta

Origin blog.csdn.net/xuezhangmen/article/details/132161009
Recomendado
Clasificación