java - META-INF的目的是什么?

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

Kristian asked 2019-02-09T12:29:24Z

12个解决方案

150 votes

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

META-INF目录

Java 2平台可识别和解释META-INF目录中的以下文件/目录,以配置应用程序,扩展,类加载器和服务:

services/

清单文件,用于定义扩展和包相关的数据。

services/

此文件由jar工具的新“services/”选项生成,该选项包含应用程序或扩展中定义的包的位置信息。 它是JarIndex实现的一部分,并由类加载器用于加速其类加载过程。

services/

JAR文件的签名文件。 'x'代表基本文件名。

services/

与签名文件关联的签名块文件具有相同的基本文件名。 该文件存储相应签名文件的数字签名。

services/

此目录存储所有服务提供程序配置文件。

aku answered 2019-02-09T12:31:35Z

59 votes

一般来说,你不应该自己把任何东西放到META-INF中。 相反,你应该依靠你用来打包JAR的任何东西。 这是我认为Ant非常擅长的领域之一:指定JAR文件清单属性。 说起来很容易:

至少,我觉得这很容易...... :-)

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

Daniel Spiewak answered 2019-02-09T12:29:59Z

24 votes

我注意到一些Java库已经开始使用META-INF作为一个目录,其中包含应该打包并包含在CLASSPATH中的配置文件以及JAR。 例如,Spring允许您使用以下方法导入类路径上的XML文件:

在这个例子中,我直接引用了Apache CXF用户指南。 在我工作的项目中,我们必须通过Spring允许多级配置,我们遵循这个约定并将我们的配置文件放在META-INF中。

当我反思这个决定时,我不知道将配置文件包含在特定Java包中而不是META-INF中究竟会出现什么问题。 但它似乎是一个新兴的事实上的标准; 无论是那个,还是一个新兴的反模式:-)

user38748 answered 2019-02-09T12:32:17Z

8 votes

您还可以在其中放置静态资源。

例如:

META-INF/resources/button.jpg

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

http://localhost/myapp/button.jpg

>

/ META-INF/MANIFEST.MF有一个特殊含义:

如果您使用java.lang.Package.getPackage("org.myserver").getImplementationTitle()运行jar,则可以将主类定义移动到jar中,以便将调用缩小为java -jar myjar.jar。

如果使用java.lang.Package.getPackage("org.myserver").getImplementationTitle(),则可以将Metainformation定义为包。

您可以参考您希望在Applet / Webstart模式下使用的数字证书。

Peter Rader answered 2019-02-09T12:33:32Z

8 votes

META-INF文件夹是MANIFEST.MF文件的主页。 此文件包含有关JAR内容的元数据。 例如,有一个名为Main-Class的条目,它指定具有可执行JAR文件的静态main()的Java类的名称。

Brian Matthews answered 2019-02-09T12:34:00Z

4 votes

只是为了添加这里的信息,在WAR文件的情况下,META-INF / MANIFEST.MF文件为开发人员提供了一个工具来启动容器的部署时检查,确保容器可以找到应用程序的所有类。 依赖于取决于。 这可以确保在您错过JAR的情况下,您不必等到应用程序在运行时爆炸才能意识到它已丢失。

sasuke answered 2019-02-09T12:34:28Z

3 votes

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

为什么会这样?

cxf案件可能是合法的。 这是另一个地方,建议使用这个非标准来解决JBoss-ws中令人讨厌的错误,该错误会阻止服务器端验证wsdl的模式。

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

但实际上似乎没有任何标准,任何你都不会。 通常这些东西都是非常严格定义的,但由于某种原因,似乎这里没有标准。 奇。 似乎META-INF已经成为任何所需配置的一个繁琐的地方,这些配置无法通过其他方式轻松处理。

Steve Cohen answered 2019-02-09T12:35:36Z

3 votes

如果您正在使用JPA1,则可能必须在其中删除persistence.xml文件,该文件指定您可能要使用的持久性单元的名称。 持久性单元提供了一种方便的方法来指定一组元数据文件,以及包含要在分组中保留的所有类的类和jar。

import javax.persistence.EntityManagerFactory;

import javax.persistence.Persistence;

// ...

EntityManagerFactory emf =

Persistence.createEntityManagerFactory(persistenceUnitName);

在这里查看更多:[http://www.datanucleus.org/products/datanucleus/jpa/emf.html]

f0ster answered 2019-02-09T12:36:15Z

3 votes

Maven中的META-INF

在Maven中,可以理解META-INF文件夹,因为标准目录布局按名称约定将项目资源打包到JAR中:放置在$ {basedir} / src / main / resources目录中的任何目录或文件都打包到JAR中 从JAR底部开始的完全相同的结构。 Folder $ {basedir} / src / main / resources / META-INF通常包含.properties文件,而jar中包含生成的MANIFEST.MF,pom.properties,pom.xml以及其他文件。 像Spring这样的框架使用classpath:/META-INF/resources/来提供Web资源。 有关更多信息,请参阅如何向Maven项目添加资源

EliuX answered 2019-02-09T12:37:52Z

3 votes

添加到此处的信息,META-INF是一个特殊的文件夹,getSystemResources处理与jar中的其他文件夹不同。嵌套在META-INF文件夹中的元素不会与其外部的元素混合。

把它想象成另一个根。 从getSystemResources方法等方面来看:

当给定路径以“META-INF”开头时,该方法搜索嵌套在类路径中所有jar的META-INF文件夹内的资源。

当给定路径不以“META-INF”开头时,该方法搜索类路径中所有jar和目录的所有其他文件夹(META-INF外)中的资源。

如果您知道getSystemResources方法专门处理的另一个文件夹名称,请对其进行评论。

Readren answered 2019-02-09T12:38:58Z

1 votes

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

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

描述如下。

如果希望在部署应用程序时将应用程序内部嵌入的上下文XML描述符(位于/META-INF/context.xml)复制到拥有主机的xmlBase,则设置为true。 在后续启动时,复制的上下文XML描述符将优先于嵌入在应用程序内的任何上下文XML描述符,即使嵌入在应用程序内的描述符更新。 标志的值默认为false。 请注意,如果拥有主机的deployXML属性为false,或者拥有主机的copyXML属性为true,则此属性将不起作用。

Tugrul answered 2019-02-09T12:39:56Z

0 votes

您的META-INF文件夹中有MANIFEST.MF文件。 您可以定义必须具有访问权限的可选或外部依赖项。

例:

考虑你已经部署了你的应用程序和你的容器(在运行时)发现你的应用程序需要一个不在lib文件夹中的新版本的库,在这种情况下如果你在Source:中定义了可选的较新版本,那么你的应用程序将 从那里引用依赖(并且不会崩溃)。

Source: Head First Jsp&Servlet的

Prateek Joshi answered 2019-02-09T12:40:39Z

java meta-inf作用_java - META-INF的目的是什么?相关推荐

  1. html的meta标签作用,网站meta标签就什么,meta标签的作用

    Meta标签如何优化?对SEOer来说,meta标签是网站参与排名的基础,这也在某一方面决定了SEO的优化周期以及效果,会做和做好其实就是两个概念,虽然Mate标签操作不难,难度就在于标签的精炼,今天 ...

  2. java关键字的作用_java关键字及其作用

    java关键字及其作用 java 关键字及其作用 一. 关键字总览:关键字 含义abstract 表明类或者成员方法具有抽象属性assert 用来进行程序调试boolean 基本数据类型之一,布尔类型 ...

  3. java对象序列化作用_Java学习之——理解对象序列化

    Java的对象序列化就是把对象写入到输出流中,用来存储或传输:反序列化就是从输入流中读取对象.简单的来说是指将那些实现了Serializable接口的对象转换成一个字节序列,并能够在以后将这个字节序列 ...

  4. latch.await java有什么作用_java相关:CountDownLatch源码解析之await()

    java相关:CountDownLatch源码解析之await() 发布于 2020-6-18| 复制链接 摘记: CountDownLatch 源码解析-- await(),具体内容如下上一篇文章说 ...

  5. java finally的作用_java中finally关键字的特点和作用是什么

    java中finally关键字的特点和作用是什么 发布时间:2020-09-08 11:12:01 来源:亿速云 阅读:114 作者:小新 小编给大家分享一下java中finally关键字的特点和作用 ...

  6. java 虚引用 作用_Java的强引用、弱引用、软引用和虚引用,以及用途

    Java种除了基本数据类型,其它数据类型都是引用的数据类型.而应用数据类型根据生命周期的长短又分为:强引用.弱引用.软引用和需引用(幻象引用),我们平时基本上只用到强引用类型,而其他的引用类型我们也就 ...

  7. java 代码块 作用_Java核心(三):代码块的作用

    Java中用{ }括起来的代码段就是代码块,他分为如下几种类型 位置 作用 局部代码块 在方法当中使用,作用是控制变量的生命周期. 局部代码块的变量,只能在代码块内部使用,在执行结束后会被Java回收 ...

  8. java 线程组作用_Java线程组(ThreadGroup)使用

    JDK 对线程组类注释: A thread group represents a set of threads. In addition, a thread group can also includ ...

  9. java代码中 作用_Java利用开发中代码生成工具的作用

    Java利用开发中代码生成工具的作用 2010-6-5文字大小:大中小 近来,随着各种代码生成工具的不断涌现(如SpringSource的Spring Roo.Skyway Builder Commu ...

  10. java 逻辑或 作用_Java开发中与之间的区别,你真的知道吗?

    &与&& 首先来讲一下&&,这个在java逻辑运算符里面被称为短路与,它与&逻辑与只差了一个& ,但是区别却很大,它的作用是如果前面的表达式运行 ...

最新文章

  1. DDoS***如此猖獗,我们该如何解决?
  2. 学习笔记Hive(九)—— 实例:航空客户价值分析数据预处理
  3. response code 404 500
  4. 解惑(一) ----- super(XXX, self).__init__()到底是代表什么含义
  5. 【Linux命令大全】
  6. Angular网络请求的封装
  7. C#匿名委托,匿名函数,lambda表达式
  8. “SD卡已损坏。可能需要重新格式化卡” 解决办法!
  9. 禁用win10触摸屏手势_禁用和启用Win10平板边缘滑动手势的详细方法
  10. 电脑技巧:Win10电脑卡顿解决小技巧,非常实用
  11. 小进阶:数据指标体系和数据治理的管理
  12. 看了这篇文章,再也不用纠结该选OV证书还是EV证书了
  13. 高效办公之云端实时协作企业办公软件:石墨文档
  14. mongodb类型转换
  15. screen和scp
  16. 安卓开发:怎样实时在百度地图上绘制运动轨迹?
  17. 今年的奥运会延期至2021年夏季举行,盘点一下历届奥运会数据
  18. 在线购物飞涨。 这就是它不会持续的原因
  19. CMU15445 2020 B+TREE简单记录
  20. 畅通工程 hdu 1232 HDU - 1863 (并查集+最小生成树)

热门文章

  1. 帝国php漏洞,帝国cms远程代码执行漏洞-2
  2. Ceres Solver 具体案例分析
  3. css绘制星星闪烁,CSS3 闪烁的星星
  4. 03.subview_and_superview
  5. Python案例1—人民币与美元的汇率兑换V_9.0(已完结)
  6. 简述计算机硬件,简述计算机硬件的组成部分
  7. JavaScript中三元运算符
  8. Android 长按3Dtouch快捷方式
  9. 手把手和你用原生JS写一个循环播放图片轮播
  10. IDEA2022中的other setting(default setting)位置