2010-12-27 15 views
12
<dependency> 
     <groupId>javax.servlet</groupId> 
     <artifactId>servlet-api</artifactId> 
     <version>2.5</version> 
     <scope>provided</scope> 
</dependency> 

私はプロジェクトのpom.xmlでその依存関係インポートを使用しています。私の質問は私がバージョン2.5と宣言したことです。しかし、より低いバージョンを書くことが重要ですか?たとえば、私のプロジェクトで3.0バージョンが使用されていて、それを書いたら2.5が提供されますか? (私は、2.5がうまく、私のプロジェクトはうまくいきます。他の何も変わらず、2.5から2.0に変更するだけでエラーになるのですか?)maven提供スコープ

答えて

6

それに依存します。

一般的に言えば、(提供されていても)正確なバージョンが必要な場合は、それを提供する必要があります。

ただし、バージョンの微妙な調整が必要な場合があります。それは言われている - 私は2点を争うだろう:

1)あなたのプロジェクトは、より低いバージョンを期待し、より高いバージョンで提供することはおそらく大丈夫です。 上位バージョンがメジャーでない限りです。私はApache projectのような良いオープンソースのバージョン管理モデルを見てみることをお勧めします。

2)おそらくではありませんあなたのプロジェクトはより高いバージョンを期待し、より低いバージョンを取得するようにしてください。主な理由は、あなたがそこにないかもしれないものを期待することができないということです。

こちらがお役に立てば幸いです。

+0

感謝を。私はいくつかの方法を使用しない場合、その下位バージョンとの互換性を持たないことを理解しています。 – kamaci

20

正しい解決策は、コンテナで使用されている正確なサーブレットのapiバージョンをマイナーに宣言することです。

キーワードはです。指定したバージョンはコンパイル時およびテスト時に使用されます。実行時には、実行時コンテナによって提供されると想定されます。桟橋。

実際のランタイムライブラリがPOMの宣言と異なる場合は、問題を招いています。あなたが問題を経験するかどうかは、バージョン間の互換性の問題です。

サーブレットAPIは、下位互換性があり、以下を参照してください Are the Java Servlet APIs backwards compatible?

+0

ありがとう、あなたはそれをよく説明しました、私は投票しています。 – kamaci

関連する問題