在Java中,您经常会看到包含一些元文件的META-INF文件夹。这个文件夹的用途是什么?我可以在那里放些什么?
发布于 2008-09-16 08:05:30
一般来说,您不应该自己将任何内容放入META-INF中。相反,您应该依赖于您用来打包JAR的任何东西。这是我认为Ant真正擅长的领域之一:指定JAR文件清单属性。很容易说出这样的话:
<jar ...>
<manifest>
<attribute name="Main-Class" value="MyApplication"/>
</manifest>
</jar>至少,我认为这很容易。:-)
关键是META-INF应该被视为内部Java元目录。别搞砸了!您希望包含在JAR中的任何文件都应该放在某个其他的子目录中,或者放在JAR本身的根目录中。
发布于 2008-09-16 15:57:15
来自the official JAR File Specification (链接到Java7版本,但文本至少从1.3版开始没有更改):
META-INF目录
Java 2平台可以识别和解释META-INF目录中的以下文件/目录,以配置应用程序、扩展、类加载器和服务:
MANIFEST.MF用于定义扩展和包相关数据的清单文件。
INDEX.LIST该文件由jar工具的新"-i“选项生成,该选项包含应用程序或扩展中定义的包的位置信息。它是JarIndex实现的一部分,由类加载器用来加快其类加载过程。
x.SFJAR文件的签名文件。'x‘代表基本文件名。
x.DSA与具有相同基本文件名的签名文件关联的签名块文件。此文件存储相应签名文件的数字签名。
services/此目录存储所有服务提供商配置文件。
发布于 2008-11-24 21:38:41
我注意到一些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 User Guide中的内容。在我工作的一个项目中,我们必须允许通过Spring进行多级配置,我们遵循了这个约定,并将配置文件放在META-INF中。
当我思考这一决定时,我不知道简单地将配置文件包含在特定的Java包中而不是META-INF中到底有什么问题。但它似乎是一个新兴的事实上的标准;要么,要么是一个新兴的反模式:-)
https://stackoverflow.com/questions/70216
复制相似问题