4

JSF によって提供される機能への小さな追加 (追加の ResourceHandlers など) を含むライブラリがあります。

(パッケージからの) JSF クラスを使用するjavax.faces.*ため、当然、JSF API に依存する必要があります。ライブラリは Maven プロジェクトとしてパッケージ化されており、com.sun.faces:jsf-api.

これは、コンパイルや、Mojarra を使用するプロジェクトでの使用に適しています。ただし、MyFaces を使用する JSF アプリケーションにライブラリを含めると、「Exception: could not find Factory: javax.faces.context.FacesContextFactory 」で説明されているように、エラーが発生します。

どうやら、アプリケーションが MyFaces を使用する場合、それはjsf-api.jar または jsf-impl.jarではなく、 myfaces-api.jarおよびmyfaces-impl.jar (または対応する Maven deps) を使用する必要があります。

これは私を少し混乱させます。

  • Mojarra と MyFaces が異なる API jar を使用するのはなぜですか? どちらも同じ API (JSF) を実装しているので、同じ API jar を使用するべきではありませんか?
  • 「api」と「impl」のjarを別々にすることの要点は、「impl」部分だけを切り替えて別の実装を使用する必要があるということだと思いました。私は何かを誤解しましたか?
  • より具体的には、JSF API のみに依存する必要があるライブラリの適切な Maven 依存関係は何ですか? 現在、私たちは jsf-api に依存しており、MyFaces を使用するプロジェクトは、<exclusions>jsf-api を破棄して myfaces-api を含めるために使用する必要があります。それはうまくいきますが、確かにもっと良い方法がありますか?
4

2 に答える 2

3

配布/ライセンスの問題のために、異なる API jar を使用している可能性があります。正確にはわかりません。ただし、API は同じです。FacesContextFactory は myfaces-api jar にもあります。

依存関係の適切なセットを定義するプロファイル (または 2 つの別個のモジュール) を作成しようとします。プロファイルを使用すると、依存関係を切り替えるためにプロファイルの 1 つを手動でアクティブ化する必要があります。モジュールを使用すると、両方がビルドされますが、ソースをどこに配置するかという問題が発生しますが、依存関係をコンパイルするように設定できるため、成果物を簡単に作成できます。

ここで Gradle を見る価値があるかもしれません - 私は常に、さまざまな依存関係のセットを採用する必要があるプロジェクトで問題を抱えていましたが、そこでいくつかの優れた機能を見てきました。

申し訳ありませんが、このセットアップについてもまだ良い解決策が見つかりません。

編集:考えながら: SCM に 2 つのブランチを作成し、それらの間の変更をマージするだけでよいでしょうか? (もちろん依存関係のほかに)

于 2012-08-02T08:36:08.980 に答える
2

MojarraとMyFacesが異なるAPIjarを使用するのはなぜですか?どちらも同じAPI(JSF)を実装しているので、同じAPI jarを使用するべきではありませんか?

これらはJSFの個別の実装です。JSFは仕様です。この質問を参照してください。

より具体的には、JSF APIのみに依存する必要があるライブラリの正しいMaven依存関係は何ですか?現在、私たちはjsf-apiに依存しており、MyFacesを使用するプロジェクトは、jsf-apiを破棄し、myfaces-apiを含めるために使用する必要があります。それはうまくいきますが、確かにもっと良い方法がありますか?

「JSFAPI」と呼んでいるのは、Sun / Oracleによるその実装(Mojarra)です。これらの依存関係は次のとおりです。

<dependency>
            <groupId>com.sun.faces</groupId>
            <artifactId>jsf-api</artifactId>
            <version>2.1.2</version>
        </dependency>
        <dependency>
            <groupId>com.sun.faces</groupId>
            <artifactId>jsf-impl</artifactId>
            <version>2.1.2</version>
        </dependency>
于 2012-07-31T22:17:22.087 に答える