在Java中,您经常会看到包含一些元文件的meta - inf文件夹。这个文件夹的目的是什么?我可以在那里放什么?


当前回答

你也可以在那里放置静态资源。

在示例:

META-INF/resources/button.jpg 

并通过web3.0容器获取它们

http://localhost/myapp/button.jpg

>阅读更多

/ meta - inf / MANIFEST。MF有特殊的含义:

如果你使用java -jar myjar.jar org.myserver.MyMainClass运行一个jar,你可以将主类定义移动到jar中,这样你就可以将调用缩小到java -jar myjar.jar。 如果你使用java.lang.Package.getPackage("org.myserver"). getimplementationtitle(),你可以为包定义元结构。 您可以在Applet/Webstart模式中引用您喜欢的数字证书。

其他回答

我最近一直在思考这个问题。对于META-INF的使用似乎真的没有任何限制。当然,有一些限制,关于把舱单放在那里的必要性,但似乎没有任何禁止把其他东西放在那里。

为什么会这样呢?

cxf案例可能是合法的。这里是建议使用非标准的另一个地方,它可以绕过JBoss-ws中防止针对wsdl模式进行服务器端验证的严重错误。

http://community.jboss.org/message/570377#570377

但似乎真的没有什么标准,没有什么千言万语。通常这些事情都有非常严格的定义,但出于某种原因,这里似乎没有标准。奇数。META-INF似乎已经成为了一个无所不包的地方,任何所需的配置都无法通过其他方式轻松处理。

来自官方JAR文件规范(链接到Java 7版本,但文本至少从v1.3开始就没有改变):

The META-INF directory The following files/directories in the META-INF directory are recognized and interpreted by the Java 2 Platform to configure applications, extensions, class loaders and services: MANIFEST.MF The manifest file that is used to define extension and package related data. INDEX.LIST This file is generated by the new "-i" option of the jar tool, which contains location information for packages defined in an application or extension. It is part of the JarIndex implementation and used by class loaders to speed up their class loading process. x.SF The signature file for the JAR file. 'x' stands for the base file name. x.DSA The signature block file associated with the signature file with the same base file name. This file stores the digital signature of the corresponding signature file. services/ This directory stores all the service provider configuration files.

自Java 9实现JEP 238以来新增了多版本jar。一个会看到子文件夹的版本。这个特性允许将不同Java版本的类打包到一个jar中。

Maven中的META-INF

在Maven中,META-INF文件夹被理解是因为标准目录布局,根据名称约定将您的项目资源打包到JAR中:放置在${basedir}/src/main/resources目录中的任何目录或文件都以完全相同的结构打包到JAR中,从JAR的底部开始。

文件夹${basedir}/src/main/resources/META-INF通常包含。properties文件,而在jar中包含一个生成的MANIFEST。MF,砰的一声。属性,pom.xml,以及其他文件。同样,像Spring这样的框架使用classpath:/META-INF/resources/来提供web资源。

有关更多信息,请参阅如何向Maven项目添加资源。

所有答案都是正确的。Meta-inf有很多用途。此外,这里还有一个关于使用tomcat容器的示例。

去 Tomcat Doc并检查 “标准实现> copyXML”属性。

描述如下。

Set to true if you want a context XML descriptor embedded inside the application (located at /META-INF/context.xml) to be copied to the owning Host's xmlBase when the application is deployed. On subsequent starts, the copied context XML descriptor will be used in preference to any context XML descriptor embedded inside the application even if the descriptor embedded inside the application is more recent. The flag's value defaults to false. Note if the deployXML attribute of the owning Host is false or if the copyXML attribute of the owning Host is true, this attribute will have no effect.

一般来说,您自己不应该在META-INF中放入任何东西。相反,您应该依赖于您用来打包JAR的任何东西。这是我认为Ant真正擅长的领域之一:指定JAR文件清单属性。这样说很容易:

<jar ...>
    <manifest>
        <attribute name="Main-Class" value="MyApplication"/>
    </manifest>
</jar>

至少,我认为这很简单……: -)

关键是meta - inf应该被视为一个内部Java元目录。别乱动它!您希望包含在JAR中的任何文件都应该放在其他子目录中或JAR本身的根目录中。