你真的了解META-INF嗎?


你真的了解META-INF嗎?

做過JAVA EE開發的工程師應該都知道在JAVA build出來的JAR或者WAR的頂層目錄下有個META-INF文件夾吧,可是有多少人能夠清楚說出這個文件夾到底是做神馬的? What is the purpose of META-INF? 恐怕不是都能說的清楚准確吧。

把這個問題拋出來,是因為我在公司的項目中發現META-INF這個文件夾被誤用了,看來不是每個人都清楚:)

所謂META-INF, 說白了就是存放一些meta information相關的文件的這么一個文件夾, 一般來說盡量不要自己手工放置文件到這個文件夾。怎么理解這句話呢?就是說這個文件夾應該被看作是JAVA工程的一個內部META目錄,所以這個目錄下的文件應該都是build工具來生成的。我們自己的文件應該直接放到根目錄下或者其他的子目錄中。

根據官方的JAR file specification(http://docs.oracle.com/javase/7/docs/technotes/guides/jar/jar.html), 一個典型的META-INF目錄下可能包含如下幾種文件或者子目錄:
  • MANIFEST.MF
  • INDEX.LIST
  • x.SF
  • x.DSA
  • services/

不過理想和現實總是有差距,現在即使一些著名的開源代碼對META-INF的使用上都存在大的差異,類似Apache CXF中就有這樣的Spring配置:
<beans xmlns="http://www.springframework.org/schema/beans"
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     xmlns:jaxws="http://cxf.apache.org/jaxws"
     xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
http://cxf.apache.org/jaxws http://cxf.apache.org/schema/jaxws.xsd">

     <import resource="classpath:META-INF/cxf/cxf.xml" />
     <import resource="classpath:META-INF/cxf/cxf-extension-soap.xml" />
     <import resource="classpath:META-INF/cxf/cxf-servlet.xml" />
  ...
</beans>


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM