매니페스트 사용Java의 MF 파일
, 에는 JAR, WAR, EAR이 .MANIFEST.MF
META-INF
더입니니다다
★★★★★★★★★★★★★★★★★★★★★★의 용도는 무엇입니까?MANIFEST.MF
파일? 이 파일에서 지정할 수 있는 모든 것은 무엇입니까?
Java Development Kit 버전 1.0으로 작성된 JAR 파일의 Manifest 파일의 내용은 다음과 같습니다.
Manifest-Version: 1.0
모든 엔트리가 이름과 값의 쌍으로 되어 있습니다.헤더의 이름은 콜론으로 값과 구분됩니다.기본 매니페스트에는 매니페스트 사양 버전 1.0에 준거하고 있는 것이 표시됩니다.매니페스트에는 아카이브에 패키지된 다른 파일에 대한 정보도 포함될 수 있습니다.매니페스트에 기록되는 정확한 파일 정보는 JAR 파일의 용도에 따라 달라집니다.기본 매니페스트 파일은 다른 파일에 대해 기록할 정보에 대한 가정을 하지 않으므로 한 줄에는 자신에 대한 데이터만 포함됩니다.특수 용도 매니페스트 헤더
JAR 파일의 역할에 따라 기본 매니페스트를 변경해야 할 수 있습니다.JAR 파일이 아카이브만을 목적으로 작성된 경우 MANPAST.MF 파일은 목적이 없습니다.대부분의 JAR 파일 사용은 단순한 아카이브 및 압축을 넘어서 매니페스트 파일에 특수 정보가 있어야 합니다.아래는 일부 특수 목적의 JAR 파일 함수에 필요한 헤더에 대한 간단한 설명입니다.
JAR 파일로 번들된 응용 프로그램: 응용 프로그램이 JAR 파일에 번들된 경우 Java Virtual Machine에 응용 프로그램의 엔트리 포인트를 알려야 합니다.진입점은 퍼블릭 스태틱 보이드메인(String[] args) 메서드를 가진 클래스입니다.이 정보는 Main-Class 헤더에 기재되어 있습니다.일반적인 형식은 다음과 같습니다.
Main-Class: classname
값 classname은 응용 프로그램의 진입점으로 대체됩니다.
Download Extensions: 다운로드 확장자는 다른 JAR 파일의 매니페스트 파일에서 참조되는 JAR 파일입니다.일반적인 상황에서 애플릿은 JAR 파일(또는 여러 JAR 파일)을 참조하는 매니페스트에서 해당 애플릿의 목적을 위한 확장자로 기능하는 JAR 파일을 번들합니다.내선번호도 같은 방법으로 서로 참조할 수 있습니다.다운로드 확장자는 애플릿, 응용 프로그램 또는 다른 확장자의 매니페스트 파일의 Class-Path 헤더필드에서 지정합니다.Class-Path 헤더는 다음과 같습니다.
Class-Path: servlet.jar infobus.jar acme/beans.jar
이 헤더에서는 servlet.jar, infobus.jar 및 acme/beans.jar 파일의 클래스가 애플릿 또는 응용 프로그램의 확장자로 기능합니다.Class-Path 헤더 내의 URL은 애플릿 또는 응용 프로그램의 JAR 파일 URL에 대해 상대적으로 지정됩니다.
패키지 씰링: JAR 파일 내의 패키지를 선택적으로 씰링할 수 있습니다.즉, 해당 패키지에 정의된 모든 클래스는 동일한 JAR 파일에 아카이브되어야 합니다.패키지는 소프트웨어 클래스 간에 버전 일관성을 보장하기 위해 또는 보안 대책으로 밀봉될 수 있습니다.패키지를 씰링하려면 패키지에 Name 헤더를 추가한 후 다음과 같이 Sealed 헤더를 추가해야 합니다.
Name: myCompany/myPackage/
Sealed: true
Name 헤더의 값은 패키지의 상대 경로 이름입니다.파일 이름과 구별하기 위해 '/'로 끝납니다.Name 헤더 뒤에 공백줄이 없는 헤더는 Name 헤더에 지정된 파일 또는 패키지에 적용됩니다.위의 예에서는 [Name: myCompany/myPackage]헤더 뒤에 [Sealled]헤더가 공백 행 없이 표시되므로 [Sealled]헤더는 myCompany/myPackage]패키지에 적용되는 것으로 해석됩니다.
패키지 버전 관리:Package Versioning 사양은 버전 정보를 보관하는 여러 매니페스트 헤더를 정의합니다.이러한 헤더의 세트는 각 패키지에 할당할 수 있습니다.버전 관리 헤더는 패키지의 Name 헤더 바로 아래에 표시됩니다.다음 예제에서는 모든 버전 헤더를 보여 줍니다.
Name: java/util/
Specification-Title: "Java Utility Classes"
Specification-Version: "1.2"
Specification-Vendor: "Sun Microsystems, Inc.".
Implementation-Title: "java.util"
Implementation-Version: "build57"
Implementation-Vendor: "Sun Microsystems, Inc."
상세정보 : https://docs.oracle.com/javase/tutorial/deployment/jar/manifestindex.html
매니페스토MF에는 JAR 파일에 포함된 파일에 대한 정보가 포함되어 있습니다.
JAR 파일이 생성될 때마다 META-INF 폴더 내에 기본 manifest.mf 파일이 생성되며 다음과 같은 기본 엔트리가 포함됩니다.
Manifest-Version: 1.0
Created-By: 1.7.0_06 (Oracle Corporation)
이러한 항목은 "header:value" 쌍으로 표시됩니다.첫 번째 버전은 매니페스트 버전을 지정하고 두 번째 버전은 JAR 파일 작성에 사용되는 JDK 버전을 지정합니다.
Main-Class 헤더:JAR 파일을 사용하여 응용 프로그램을 패키지에 번들할 경우 응용 프로그램의 진입점에 서비스를 제공하는 클래스를 지정해야 합니다.매니페스트 파일의 'Main-Class' 헤더를 사용하여 이 정보를 제공합니다.
기본 클래스: {fully-qualified classname}
여기서 'Main-Class' 값은 메인 메서드를 가진 클래스입니다.이 엔트리를 지정하면 JAR 파일을 실행하여 응용 프로그램을 실행할 수 있습니다.
Class-Path 헤더:대부분의 경우 응용 프로그램의 JAR 파일 내에 패키지된 클래스에서 다른 JAR 파일에 액세스해야 합니다.이는 'Class-Path' 헤더를 사용하여 매니페스트 파일에 정규화된 경로를 제공함으로써 수행할 수 있습니다.
클래스 경로: {jar1-name jar2-name directory-name/jar3-name}
이 헤더를 사용하여 현재 JAR 내부가 아닌 동일한 로컬네트워크상의 외부 JAR 파일을 지정할 수 있습니다.
패키지 버전 관련 헤더:패키지 버전 관리에 JAR 파일을 사용하는 경우 Java 언어 사양에 따라 다음 헤더가 사용됩니다.
Headers in a manifest
Header | Definition
-------------------------------------------------------------------
Name | The name of the specification.
Specification-Title | The title of the specification.
Specification-Version | The version of the specification.
Specification-Vendor | The vendor of the specification.
Implementation-Title | The title of the implementation.
Implementation-Version | The build number of the implementation.
Implementation-Vendor | The vendor of the implementation.
패키지 씰링 관련 헤더:
또, JAR 파일내의 특정의 패키지를 봉인할지를 지정할 수도 있습니다.즉, 그 패키지에 정의되어 있는 모든 클래스는 같은 JAR 파일에 아카이브 할 필요가 있습니다.이것은 'Sealed' 헤더를 사용하여 지정할 수 있습니다.
이름: {package/some-package/} 봉인: true
여기서 패키지 이름은 '/'로 끝나야 합니다.
매니페스트 파일을 통한 보안 강화:
매니페스트 파일엔트리를 사용하여 웹 어플리케이션의 보안을 확보하거나 'Permissions', 'Codebae', 'Application-Name', 'Trusted-Only' 등의 다른 속성으로 패키지할 수 있습니다.
META-INF 폴더:
이 폴더는 매니페스트 파일이 있는 폴더입니다.또한 응용프로그램에 대한 메타 데이터를 포함하는 더 많은 파일을 포함할 수 있습니다.예를 들어 EJB 모듈 JAR 파일에서 이 폴더에는 JAR의 매니페스트 파일과 함께 EJB 모듈의 EJB 배포 설명자가 포함됩니다.또한 추상 EJB 참조를 실행하는 응용 프로그램서버의 구체적인 컨테이너 리소스에 매핑하는 xml 파일도 포함되어 있습니다.
레퍼런스:
https://docs.oracle.com/javase/tutorial/deployment/jar/manifestindex.html
언급URL : https://stackoverflow.com/questions/12767886/use-of-the-manifest-mf-file-in-java
'programing' 카테고리의 다른 글
Java String에서 토큰 세트를 바꾸려면 어떻게 해야 합니까? (0) | 2022.09.04 |
---|---|
java 로그로 행 번호를 인쇄하려면 어떻게 해야 합니까? (0) | 2022.09.04 |
Java 8 비교기 유형 추론에 매우 혼란스럽다. (0) | 2022.09.04 |
클래스의 모든 변수 이름 가져오기 (0) | 2022.09.04 |
Java 불변의 컬렉션 (0) | 2022.09.04 |