{{위키데이터 속성 추적}}
{{파일 포맷 정보
| 그림 = [[파일:Nuvola mimetypes java jar.png|100px]]
| 이름 = 자바 아카이브<br />Java Archive
| 확장자 = .jar
| MIME = application/java-archive<ref>{{웹 인용|title=File Extension .JAR Details|url=http://filext.com/file-extension/JAR|accessdate=29 November 2012}}</ref><ref>{{웹 인용|title=MIME : Java Glossary|url=http://mindprod.com/jgloss/mime.html|accessdate=29 November 2012}}</ref>
| UTI = com.sun.java-archive
| UTI 구조 =
| magic         = <code>50 4b 03 04</code> ASCII:PK\x03\x04
| 개발 = [[넷스케이프]], [[썬 마이크로시스템즈]], [[오라클 (기업)|오라클]]
| 발표일 = 
| 최신 버전 =
| 최신 버전 발표일 =
| 종류 = [[압축 파일]], [[데이터 압축]]
| 내용 =
| 표준 = 
| 웹사이트 = 
}}

'''JAR'''({{lang|en|Java Archive}}, 자바 아카이브)는 여러개의 [[자바 클래스|자바 클래스 파일]]과, 클래스들이 이용하는 관련 리소스(텍스트, 그림 등) 및 [[메타데이터]]를 하나의 파일로 모아서 [[자바 플랫폼]]에 [[응용 소프트웨어]]나 [[라이브러리 (컴퓨팅)|라이브러리]]를 배포하기 위한 [[소프트웨어]] [[패키지]] 파일 포맷이다.<ref>{{웹 인용|url=http://java.sun.com/javase/6/docs/technotes/guides/jar/index.html|title=JDK 6 Java Archive (JAR)-related APIs & DeveloperGuides|publisher=}}</ref>

JAR 파일은 실제로 [[ZIP (파일 포맷)|ZIP 파일 포맷]]으로 이루어진 [[압축 파일]]로서 파일 확장자는 <code>.jar</code>이다. 컴퓨터 사용자들은 [[자바 개발 킷|JDK]]에 포함된 <code>jar</code> 명령어를 이용하여 JAR 파일을 만들거나 압축을 풀 수 있다. 또, <code>zip</code> 도구를 사용할 수도 있으나 압축 시에는 [[매니페스트]] 파일이 처음이어야 하는 경우가 있어서 zip 파일 헤더의 엔트리 순서가 중요하다. JAR 안에서 파일 이름들은 유니코드 텍스트로 되어 있다.<ref>{{웹 인용 |url=http://download.java.net/jdk8/docs/technotes/guides/jar/jar.html |제목=보관된 사본 |확인날짜=2013년 4월 22일 |보존url=https://web.archive.org/web/20130108105404/http://download.java.net/jdk8/docs/technotes/guides/jar/jar.html#JAR_Index |보존날짜=2013년 1월 8일 |url-status=dead }}</ref>

== 설계 ==
JAR 파일은 [[자바 런타임]]이 효율적으로 애플리케이션을 [[배포]](디플로이)할 수 있는 수단으로 설계되었다. 자바 애플리케이션을 구성하는 클래스와 관련 리소스들을 단일 파일로 묶어 압축된 형태인 JAR 파일은 한 차례의 요청으로 애플리케이션 전체를 다운로드할 수 있게 해준다.

JAR 파일은 <code>META-INF/MANIFEST.MF</code>경로에 위치한 [[매니페스트 파일]]을 선택적으로 포함할 수 있다. 매니페스트 파일 안에는 어떻게 JAR 파일을 이용할지를 기술한 엔트리 정보가 적혀있다. 이를테면 [[클래스패스]] 엔트리를 사용하면 해당 JAR 파일과 함께 로드할 다른 JAR 파일들을 지정할 수 있다. <code>java.util.zip</code> 패키지는 JAR 파일을 읽고 쓰는 클래스들을 포함하고 있다.

<!-- 이 엔트리는 다른 JAR 파일에 대한 일련의 절대 경로나 상대 경로로 구성된다. JAR 이용을 단순하게 할 의도였으나 실제로는 안정적이지 못한 모습을 보여주었는데, 이는 엔트리 포인트 JAR가 만들어질 때 지정한 정확한 위치의 모든 JAR에 의존하기 때문이다. 라이브러리의 버전이나 위치를 변경하려면 새로운 매니페스트가 필요하다. -->

== 압축 해제 ==
JAR 파일의 압축을 해제하는데는 ZIP 파일을 해제하는 표준 소프트웨어를 사용하거나 [[자바 개발 키트]]에 포함된 <code>jar</code> 명령을 이용할 수 있다.: <code>jar -xf foo.jar</code>

== 보안 ==
개발자들은 JAR 파일들에 [[디지털 서명]]을 할 수 있다. 이 경우 서명 정보는 내재된 매니페스트 파일의 일부가 된다. JAR 그 자체에 서명되는 것은 아니라, 압축 파일 안의 모든 파일들이 체크섬으로 나열된다. 즉, 체크섬을 통해 서명이 된다는 것을 뜻한다. 여러 개의 엔트리들은 각기 서명함으로써 JAR 파일 자체를 변경하여 JAR 파일을 서명할 수 있지만 서명된 파일들은 그 자체로 유효한 상태로 남아있다. 서명된 JAR 파일들을 자바 런타임이 로드할 때 서명이 유효한지 확인하고 서명이 일치하지 않는 클래스들은 로드를 거부할 수 있다.

JAR 파일 안의 내용은 경우에 따라 [[리버스 엔지니어링]]을 어렵게 하기 위해 [[난독화]]되기도 한다.

== 실행 가능한 JAR 파일 ==
실행 가능한 자바 프로그램은, 프로그램이 사용하는 다른 라이브러리와 함께 JAR파일로 압축될 수 있다. JAR 파일이 실행 가능하려면 파일 안에 포함된 메니페스트 파일에 [[엔트리 포인트]]의 클래스 이름이 <code>Main-Class: myPrograms.MyClass</code> 형식으로 기술되어야 하며, 명시적으로 클래스패스 정보가 기술되어 있어야 한다.(이때 -cp 인수는 무시된다) 운영체제에 따라서는 JAR 파일의 아이콘을 직접 클릭해서 실행가능하기도 하다.<ref>{{웹 인용|url=https://zetawiki.com/wiki/%EC%9C%88%EB%8F%84%EC%9A%B0_jar_%ED%8C%8C%EC%9D%BC_%EC%8B%A4%ED%96%89|제목=윈도우 jar 파일 실행 - 제타위키|확인날짜=2023-01-04}}</ref> JAR 파일을 커맨드 라인에서 실행시키기 위해서는 <code>java -jar foo.jar</code>라고 입력한다.

== 메니페스트 ==
JAR 파일 안에 포함되어 있는 매니페스트 파일은, 메타데이터 정보를 포함하고 있다.<ref>{{웹 인용|url=http://java.sun.com/developer/Books/javaprogramming/JAR/basics/manifest.html |title=Understanding the Manifest |publisher=Java.sun.com |date=2003-03-21 |accessdate=2012-07-31}}</ref><ref>{{웹 인용|url=http://download.oracle.com/javase/6/docs/technotes/guides/jar/jar.html#JAR%20Manifest |title=JAR File Specification |publisher=Download.oracle.com |date= |accessdate=2012-07-31}}</ref> 이 메타데이터 정보에는 확장 정보 및 패키지 관련 데이터가 기술되어 있으며, 섹션 형식으로 구성된 키-값 쌍 형태의 문자열이다.
JAR이 실행 가능하도록 하기 위해서는, 메니페스트 파일에, 애플리케이션의 메인 클래스의 이름이 기술되어 있어야 한다. 메니페스트 파일의 명칭은 <code>MANIFEST.MF</code>이며, 이 파일이 포함되어 있는 디렉토리는, 압축된 파일의 내용물 가운데 가장 첫번째 위치에 배치되어야 한다.

== 관련 포맷 ==
JAR 포맷을 바탕으로 다음과 같은 파일 포맷들이 생겨났다.
* [[WAR (파일 포맷)]] : 웹 애플리케이션을 구성하는 자바 클래스와, [[자바 서버 페이지]], 관련 [[XML]] 파일 등을 묶은 압축 파일 포맷
* [[자바 EE 커넥터 아키텍처|RAR]] (resource adapter archive) : J2EE 커넥터 아키텍처(JCA) 애플리케이션을 묶는데 사용되는 압축 포맷이다.
* [[EAR (파일 포맷)|EAR]] (enterprise archive) : 자바 엔터프라이스 애플리케이션에서 이용되는 압축 포맷으로, 애플리케이션 클래스 및 관련 JAR, WAR, RAR 압축 파일들을 묶는 용도로 사용된다.
* [[안드로이드 응용 프로그램 패키지|APK]] (Android Application Package) : [[안드로이드 (운영 체제)|안드로이드]] 애플리케이션에서 사용되는 자바 압축 포맷의 일종이다.<ref>{{웹 인용|url=https://developer.android.com/guide/appendix/glossary.html|title=Glossary|website=developer.android.com}}</ref>

== 같이 보기 ==
* [[Java Platform Module System]]

== 각주 ==
{{각주}}

== 외부 링크 ==
* {{언어링크|en}} [http://download.oracle.com/javase/6/docs/technotes/guides/jar/jarGuide.html JAR File Overview]
* {{언어링크|en}} [http://download.oracle.com/javase/6/docs/technotes/guides/jar/jar.html JAR File Specification]
* {{언어링크|en}} [http://www.cse.yorku.ca/tech/other/jdk1.2.1/docs/guide/jar/manifest.html Original JAR File Specification]

{{압축 포맷}}
{{압축 소프트웨어}}

[[분류:아카이브 포맷]]
[[분류:자바 플랫폼]]