JAR(파일 형식)
JAR (file format)![]() | |
파일 이름 확장자 | .jar |
---|---|
인터넷 미디어 유형 | |
Uniform Type Identifier(UTI; 균일 유형 식별자) | com.sun.sun.displaces-displaces |
매직 넘버 | 50 4b 03 04 ASCII: PK\x03\x04 |
개발자 | Netscape, Sun Microsystems, Oracle Corporation |
포맷의 종류 | 파일 아카이브, 데이터 압축 |
확장원 | 지퍼 |
JAR(Java ARchive)는 [3]배포하기 위해 많은 Java 클래스 파일 및 관련 메타데이터 및 리소스(텍스트, 이미지 등)를 하나의 파일로 집약하는 데 일반적으로 사용되는 패키지 파일 형식입니다.
JAR 파일은 Java 고유의 매니페스트 파일을 포함하는 아카이브 파일입니다.ZIP 포맷을 기반으로 구축되어 있으며.jar
파일 [4]확장자
설계.
Java 런타임에서는 JAR 파일을 사용하여 클래스 및 관련 리소스를 포함한 전체 애플리케이션을 한 번의 요청으로 효율적으로 배포할 수 있습니다.JAR 파일 요소를 압축하여 다운로드 시간을 단축할 수 있습니다.
JAR 파일에는 매니페스트 파일이 포함될 수 있습니다.이 파일은 다음 위치에 있습니다.META-INF/MANIFEST.MF
매니페스트 파일의 엔트리는 JAR 파일의 사용 방법에 대해 설명합니다.예를 들어 Classpath 엔트리를 사용하여 JAR과 함께 로드할 다른 JAR 파일을 지정할 수 있습니다.
추출.
파일의 내용은 ZIP 형식을 지원하는 임의의 아카이브 추출 소프트웨어를 사용하여 추출할 수 있습니다.jar
Java Development Kit에서 제공하는 명령줄 유틸리티입니다.
보안.
개발자는 JAR 파일에 디지털 서명할 수 있습니다.이 경우 시그니처 정보는 내장된 매니페스트 파일의 일부가 됩니다.JAR 자체는 서명되어 있지 않지만 아카이브 내의 모든 파일이 체크섬과 함께 나열됩니다.이 체크섬이 서명되어 있습니다.여러 엔티티가 JAR 파일에 서명할 수 있으며 서명할 때마다 JAR 파일 자체를 변경할 수 있습니다.단, 서명된 파일 자체는 유효합니다.Java 런타임은 서명된 JAR 파일을 로드하면 서명을 검증하고 서명과 일치하지 않는 클래스의 로드를 거부할 수 있습니다.또한 Classloader는 Java 클래스가 모두 동일한 엔티티에 의해 서명된 경우에만 동일한 패키지에 로드되는 '씰링된' 패키지를 지원할 수 있습니다.이렇게 하면 악성 코드가 기존 패키지에 삽입되는 것을 방지하여 패키지 범위 클래스 및 데이터에 액세스할 수 있습니다.
JAR 파일의 내용은 리버스 엔지니어링을 더욱 어렵게 하기 위해 난독화될 수 있습니다.
실행 가능한 JAR 파일
실행 가능한 Java 프로그램은 프로그램이 사용하는 라이브러리와 함께 JAR 파일로 패키지될 수 있습니다.실행 가능한 JAR 파일에는 다음과 같은 진입점 클래스를 지정하는 매니페스트가 있습니다.Main-Class: myPrograms.MyClass
및 명시적인 Class-Path(및 -cp 인수는 무시됩니다)일부 운영체제는 클릭 시 이러한 기능을 직접 실행할 수 있습니다.일반적인 호출은 다음과 같습니다.java -jar foo.jar
커맨드 라인으로부터.
대부분의 플랫폼에서 네이티브 런처를 만들 수 있습니다.예를 들어 Windows EXE 파일을 원하는 Microsoft Windows 사용자는 JSmooth, Launch4J, WinRun4J 또는 Nullsoft Scriptable Install System 등의 도구를 사용하여 단일 JAR 파일을 실행 파일로 정리할 수 있습니다.
매니페스트
매니페스트 파일은 [5][6]JAR 내에 포함된 메타데이터 파일입니다.확장 및 패키지 관련 데이터를 정의합니다.이름-값 쌍이 섹션으로 정리되어 있습니다.JAR 파일을 실행 파일로 사용하는 경우 매니페스트 파일은 응용 프로그램의 기본 클래스를 지정합니다.매니페스트 파일의 이름이 지정됩니다.MANIFEST.MF
매니페스트 디렉토리는 압축된 아카이브의 첫 번째 엔트리여야 합니다.
사양
매니페스트가 표준 위치에 나타납니다.META-INF/MANIFEST.MF
. 아카이브에는 매니페스트 파일을 하나만 포함할 수 있으며 해당 위치에 있어야 합니다.[7]
Java Development Kit 버전 1.0으로 작성된 JAR 파일의 매니페스트 파일의 내용은 다음과 같습니다.
매니페스트 버전: 1.0
이름과 값은 콜론으로 구분됩니다.기본 매니페스트에는 매니페스트 사양 버전 1.0에 준거하고 있는 것이 표시됩니다.
매니페스트에는 아카이브에 패키지된 다른 파일에 대한 정보가 포함될 수 있습니다.매니페스트의 내용은 JAR 파일의 용도에 따라 달라집니다.기본 매니페스트 파일은 다른 파일에 대해 기록할 정보에 대한 가정을 하지 않으므로 한 줄에는 자신에 대한 데이터만 포함됩니다.UTF-8로 부호화할 필요가 있습니다.
특수 용도 매니페스트 헤더
아카이브만을 목적으로 작성된 JAR 파일은MANIFEST.MF
파일.
대부분의 JAR 파일 사용은 단순한 아카이브 및 압축을 넘어서 매니페스트 파일에 특별한 정보가 필요합니다.
특징들
매니페스트를 사용하면 개발자는 자신의 항아리에 대해 몇 가지 유용한 기능을 정의할 수 있습니다.속성은 키와 값의 쌍으로 지정됩니다.
적용들
애플리케이션이 JAR 파일에 포함되어 있는 경우 Java Virtual Machine은 애플리케이션의 진입점을 알아야 합니다.진입점이란 다음 클래스가 포함된 클래스입니다.public static void main(String[] args)
방법.이 정보는 manifest Main-Class 헤더에 기재되어 있습니다.이 헤더는 일반적인 형식입니다.
메인 클래스: com.example.마이클래스명
이 예에서는com.example.MyClassName.main()
응용 프로그램 실행 시 실행됩니다.
패키지 실링
옵션으로 JAR 파일 내의 패키지를 씰링할 수 있습니다.즉, 그 패키지에 정의되어 있는 모든 클래스가 같은 JAR 파일에 아카이브 됩니다.패키지는 소프트웨어 클래스 간에 버전 일관성을 보장하기 위해 또는 보안 대책으로 씰링될 수 있습니다.
패키지를 밀봉하려면 이름 항목 뒤에 다음과 같은 밀봉된 머리글이 표시되어야 합니다.
이름.: myCompany / myPackage / 봉함: 진실의
Name 헤더의 값은 패키지의 상대 경로 이름입니다.파일 이름과 구별하기 위해 '/'로 끝납니다.Name 헤더 뒤에 공백줄이 없는 헤더는 Name 헤더에 지정된 파일 또는 패키지에 적용됩니다.위의 예에서는, 다음의 이유로Sealed
header는 다음에 발생합니다.Name: myCompany/myPackage
공백 행이 없는 헤더,Sealed
header는 패키지에만 적용됩니다.myCompany/myPackage
.
밀봉된 패키지의 기능은 Java 9에서 도입된 Java Platform Module System에 의해 시대에 뒤떨어진 것으로 모듈이 패키지를 [8]분할할 수 없습니다.
패키지 버전 관리
여러 매니페스트 헤더에 버전 정보가 있습니다.각 패키지에 1 세트의 헤더를 할당할 수 있습니다.버전 관리 헤더는 패키지의 Name 헤더 바로 아래에 표시됩니다.다음 예제에서는 모든 버전 헤더를 보여 줍니다.
이름.: 자바/하드웨어/ 사양-제목: "Java 유틸리티 클래스" 사양 버전: "1.2" 사양-벤더: 선마이크로시스템즈 구현 - 제목: "190.disples" 실장 버전: "빌드57 구현 - 벤더: 선마이크로시스템즈
멀티 릴리즈
병에는 선택적으로 다중 릴리스 병으로 표시할 수 있습니다.다중 릴리스 기능을 사용하면 라이브러리 개발자는 Java [9]런타임 버전에 따라 다른 코드를 로드할 수 있습니다.이를 통해 개발자는 호환성을 희생하지 않고 새로운 기능을 활용할 수 있습니다.
다중 릴리스 자르는 매니페스트에서 다음 선언을 사용하여 활성화됩니다.
멀티 릴리즈: 진실의
의존 관계
그MANIFEST.MF
파일을 사용하여 응용 프로그램을 [10]실행할 수 있도록 로드해야 하는 모든 클래스를 지정할 수 있습니다.
Class-Path 엔트리는 시스템패스 딜리미터가 아닌 공백으로 구분됩니다.
클래스 패스: . pkg1.jar 경로/pkg2.jar
Apache Ant Zip/JAR 지원
Apache Ant 빌드 도구에는 Unix 파일 시스템 확장 지원을 포함하여 Zip 및 JAR 아카이브를 읽고 쓸 수 있는 자체 패키지가 있습니다.org.apache.tools.zip 패키지는 Apache Software Foundation 라이선스로 출시되며 Ant 이외에서 사용할 수 있도록 설계되었습니다.
관련 형식
JAR 형식에는 다음과 같은 파일 형식이 있습니다.
- WAR(Web Application Archive) 파일, Java 아카이브, XML 파일 저장, Java 클래스, Java Server 페이지 및 웹 응용 프로그램용 기타 개체.
- RAR(Resource Adapter Archive) 파일(RAR 파일 형식과 혼동하지 않음), Java 아카이브, J2EE Connector Architecture(JCA) 애플리케이션용 XML 파일, Java 클래스 및 기타 객체도 저장합니다.
- EAR(엔터프라이즈 아카이브) 파일은 XML 파일, Java 클래스 및 엔터프라이즈 애플리케이션용 JAR, WAR 및 RAR Java 아카이브 파일 등의 기타 개체를 결합하는 복합 Java 아카이브를 제공합니다.
- SAR(서비스 아카이브)는 EAR와 비슷합니다.이 기능을 통해
service.xml
파일 및 함께 제공되는 JAR 파일. - Java 아카이브 형식의 변형인 APK(Android Application Package)는 Android 응용 [11]프로그램에 사용됩니다.
- AAR(Android 아카이브)는 일반적으로 Maven을 [12]통해 Android 라이브러리를 배포하는 데 사용됩니다.
- PAR(플랜 아카이브) - Eclipse Virgo OSGi 애플리케이션 서버에서 지원되며 멀티번들 OSGi 애플리케이션을 단일 아카이브로 도입할 수 있으며 동일한 서버에 배치된 다른 PAR 기반 애플리케이션과 격리할 수 있습니다.
- KAR(Karf 아카이브) - Apache Karaf OSGi 애플리케이션 서버에서 지원되며 멀티 번들, 멀티 기능 OSGi 애플리케이션을 도입할 수 있습니다.
「 」를 참조해 주세요.
레퍼런스
- ^ "File Extension .JAR Details". Retrieved 29 November 2012.
- ^ "MIME : Java Glossary". Retrieved 29 November 2012.
- ^ "JDK 6 Java Archive (JAR)-related APIs & DeveloperGuides".
- ^ "JAR File Specification". Java SE Documentation. Oracle. Archived from the original on 2017-09-11.
- ^ "Understanding the Manifest". Java.sun.com. 2003-03-21. Retrieved 2012-07-31.
- ^ "JAR File Specification". Download.oracle.com. Retrieved 2012-07-31.
- ^ "JAR File Specification". Download.oracle.com. Retrieved 2012-07-31.
- ^ "JEP 261: Module System". Retrieved 2021-02-06.
- ^ "JEP 238: Multi-Release JAR Files". Retrieved 2021-02-06.
- ^ Sun Servlet 사양, 72페이지(servlet-2_4-fr-spec.pdf).Java Tech Notes도 참조하십시오.
- ^ "Glossary". developer.android.com.
- ^ "Android library". developer.android.com.