2014-01-08 11 views
12

私が作成したライブラリのjarファイルにバージョニング情報(およびjarに関する他のメタデータ)を追加したいとします。しかし、私はどの属性を使用するのかよく分かりません。私はspecificationと同様にdocumentationは、Specification-VersionImplementation-Version(そしてその両方のタイトルとベンダー)があることを説明しています。しかし、どちらも、仕様と実装の違いを正しく説明していません。JARマニフェストファイル - 仕様と実装の相違点

私はまた別の例を見ました。

  • documentationからのものは、Specification-Titleには人間が判読可能な名前を、Implementation-Titleにはパッケージ名を使用します。 Simplified-Versionにはドット区切りのバージョン番号が使用され、Implementation-Versionには単純なビルド番号が使用されます。
  • 実装のための実装バージョンと人間が判読できる文字列を使用しているようです。
  • another question私はいくつかの実装バージョンが異なるパッケージがある例を見つけました。

仕様と実装のメタデータの違いはなんですか?これらの異なる属性(特にバージョン番号)はどのように使用する必要がありますか?仕様のベンダーと実装が異なるのはどういう意味ですか?

私はそこに入れた役割を果たしていますか?

答えて

10

の一つです。

Specification-Versionは、ASCII期間で区切られたASCII数字のシーケンスで構成されている必要があります。その他の文字は使用できません。また、ピリオドは値の先頭または末尾にできないため、連続したピリオドは使用できません。

Implementation-Versionは自由形式の文字列です。任意の形式を取ります。

仕様 - バージョンは常にパッケージに関連付けられています。特定のパッケージではなく、マニフェスト全体に指定した場合は、.jarファイル内のすべてのパッケージに適用されます。

仕様バージョンは、依存関係を解決する手段として、いくつかのJavaテクノロジで使用されています。いくつかのプログラムでJMFライブラリのバージョン2.1以降が必要であると言われている場合、いくつかのJava環境では、各マニフェストのSpecification-Versionの番号をSpecification-Titleと一致するものとして分析し、その他のバージョンはありません)は、実行時にクラスパスで使用できます。

実際には、Package.isCompatibleWithメソッドが非常にチェックします。

if (System.class.getPackage().isCompatibleWith("1.6")) { 
    System.out.println("Running in Java 1.6 or later."); 
} 
+0

https://docs.oracle.com/javase/8/docs/technotes/guides/extensions/versioning.htmlもご覧ください。 – SWdV

6

まあ、仕様はご契約で、例えば:

  • なJAXB、JDBCやさまざまなJava EE規格の一つ(例えばEJB 2.xでは、EJB 3.0、EJB 3.1)
  • などの標準
  • ライブラリ、フレームワークまたはサービスへのAPI

実装は、その仕様の実装です。

と仕様のAPI(ひいては仕様バージョン)が変更されないかもしれませんが、あなたはバグを修正しているような実装のバージョンが変更される場合がありますなど

+1

ああ、私のライブラリーのAPIを変更するときに仕様バージョンを変更する必要がありますが、バグを修正するだけですAPIは何をすべきか)私は実装バージョンを変更するだけですか? –

+1

はい。しかし、これらは主にドキュメンテーション目的のために使用されることに注意してください。マニフェスト項目AFAIKを扱う多くのツールとライブラリがないためです。ツール/フレームワークのサポートが必要な場合は、次のことをお勧めします。コンパイル時間:Mavenバージョン管理を使用するMavenリポジトリ内のjar。ランタイム:OSGiを検討する – Puce

3

のApache Tomcatからサーブレット-api.jarのマニフェストを考えてみましょう:

Manifest-Version: 1.0 
Ant-Version: Apache Ant 1.8.4 
Created-By: 1.7.0_40-b43 (Oracle Corporation) 
X-Compile-Source-JDK: 1.7 
X-Compile-Target-JDK: 1.7 

Name: javax/servlet/ 
Specification-Title: Java API for Servlets 
Specification-Version: 3.1 
Specification-Vendor: Sun Microsystems, Inc. 
Implementation-Title: javax.servlet 
Implementation-Version: 3.1.FR 
Implementation-Vendor: Apache Software Foundation 

Apacheはそれぞれの意味はdocumentation of java.lang.Packageに説明する(日によって設立された)the JCPによって定義されたサーブレット3.1仕様のいくつかのimplementators