Java에서는 일부 메타 파일이 포함 된 META-INF 폴더가 종종 나타납니다. 이 폴더의 목적은 무엇이며 거기에 무엇을 넣을 수 있습니까?
답변
일반적으로 META-INF에 아무것도 넣지 마십시오. 대신 JAR을 패키지화하는 데 사용하는 모든 것에 의존해야합니다. 이것은 Ant가 실제로 탁월한 것으로 생각하는 영역 중 하나입니다. JAR 파일 매니페스트 속성을 지정하십시오. 다음과 같이 말하는 것이 매우 쉽습니다.
<jar ...>
<manifest>
<attribute name="Main-Class" value="MyApplication"/>
</manifest>
</jar>
적어도, 나는 그것이 쉽다고 생각합니다 … 🙂
요점은 META-INF가 내부 Java 메타 디렉토리 로 간주되어야한다는 것 입니다. 엉망하지 마십시오! JAR에 포함시키려는 모든 파일은 다른 하위 디렉토리 또는 JAR 자체의 루트에 있어야합니다.
답변
에서 공식 JAR 파일 사양 (링크는 자바 7 버전으로 간다, 그러나 텍스트가 적어도 1.3에서 이후 변경되지 않았습니다)
META-INF 디렉토리
META-INF 디렉토리의 다음 파일 / 디렉토리는 Java 2 플랫폼에 의해 인식되고 해석되어 응용 프로그램, 확장, 클래스 로더 및 서비스를 구성합니다.
MANIFEST.MF
확장 및 패키지 관련 데이터를 정의하는 데 사용되는 매니페스트 파일입니다.
INDEX.LIST
이 파일은
-i
jar 도구 의 새로운 ” “옵션에 의해 생성되며 여기에는 응용 프로그램 또는 확장에 정의 된 패키지의 위치 정보가 포함됩니다. JarIndex 구현의 일부이며 클래스 로더가 클래스 로딩 프로세스 속도를 높이기 위해 사용합니다.
x.SF
JAR 파일의 서명 파일 ‘x’는 기본 파일 이름을 나타냅니다.
x.DSA
동일한 기본 파일 이름을 가진 서명 파일과 연관된 서명 블록 파일 이 파일은 해당 서명 파일의 디지털 서명을 저장합니다.
services/
이 디렉토리는 모든 서비스 제공자 구성 파일을 저장합니다.
답변
일부 Java 라이브러리는 META-INF를 JAR로 패키지하고 CLASSPATH에 포함해야하는 구성 파일을 포함하는 디렉토리로 사용하기 시작했습니다. 예를 들어 Spring에서는 다음을 사용하여 클래스 경로에있는 XML 파일을 가져올 수 있습니다.
<import resource="classpath:/META-INF/cxf/cxf.xml" />
<import resource="classpath:/META-INF/cxf/cxf-extensions-*.xml" />
이 예에서는 Apache CXF 사용 설명서 에서 바로 인용합니다. 있습니다. Spring을 통해 여러 수준의 구성을 허용 해야하는 프로젝트 에서이 규칙을 따르고 구성 파일을 META-INF에 넣었습니다.
이 결정을 반영 할 때 META-INF가 아닌 특정 Java 패키지에 구성 파일을 포함시키는 것만으로 무엇이 잘못 될지 정확히 알 수 없습니다. 그러나 이것은 사실상의 표준으로 보인다. 그 또는 새로운 안티 패턴 🙂
답변
META-INF 폴더는 MANIFEST.MF 파일 의 홈입니다 . 이 파일에는 JAR 내용에 대한 메타 데이터가 포함되어 있습니다. 예를 들어, 실행 가능한 JAR 파일의 정적 main ()을 사용하여 Java 클래스의 이름을 지정하는 Main-Class라는 항목이 있습니다.
답변
거기에 정적 리소스를 배치 할 수도 있습니다.
예를 들면 다음과 같습니다.
META-INF/resources/button.jpg
를 통해 web3.0 컨테이너에 가져옵니다.
http://localhost/myapp/button.jpg
/META-INF/MANIFEST.MF에는 특별한 의미가 있습니다.
- 를 사용하여 jar를 실행
java -jar myjar.jar org.myserver.MyMainClass
하면 기본 클래스 정의를 jar로 이동하여 호출을로 줄일 수 있습니다java -jar myjar.jar
. - 사용하는 경우 패키지에 메타 정보를 정의 할 수 있습니다
java.lang.Package.getPackage("org.myserver").getImplementationTitle()
. - Applet / Webstart 모드에서 사용하려는 디지털 인증서를 참조 할 수 있습니다.
답변
Maven의 META-INF
Maven에서 META-INF 폴더는 표준 디렉토리 레이아웃으로 이해 되는데, 이는 이름 규칙에 따라 프로젝트 자원을 JAR 내에 패키지화합니다. $ {basedir} / src / main / resources 디렉토리에 있는 디렉토리 또는 파일 은 JAR로 패키지됩니다 JAR의 기초에서 시작하는 것과 동일한 구조로. $ {basedir} / src / main / resources / META-INF 폴더 에는 일반적으로 .properties 파일이 포함되어 있고 jar 파일에는 다른 파일 중에서 생성 된 MANIFEST.MF , pom.properties , pom.xml이 포함되어 있습니다. 또한 Spring 과 같은 프레임 워크는 사용classpath:/META-INF/resources/
는 웹 리소스를 제공 데 됩니다. 자세한 내용은어떻게 메이븐 프로젝트에 리소스를 추가하려면 어떻게해야합니까 .
답변
WAR 파일의 경우 여기에 정보를 추가하기 위해 META-INF / MANIFEST.MF 파일은 개발자에게 컨테이너가 애플리케이션에서 모든 클래스를 찾을 수 있도록 컨테이너에서 배치 시간 확인을 시작하는 기능을 제공합니다. 에 달려 있습니다. 따라서 JAR을 놓친 경우 런타임에 응용 프로그램이 없어 질 때까지 기다릴 필요가 없습니다.