我們有一個庫,其中包含JSF提供的功能(類似於其他ResourceHandlers)的小增加。使用JSF的庫的Maven依賴關係,應該與Mojarra或MyFaces一起工作
因爲它使用JSF類(來自javax.faces.*
包),所以它自然必須依賴於JSF API。該庫打包爲Maven項目,並取決於com.sun.faces:jsf-api
。
這適用於編譯,以及在使用Mojarra的項目中使用。但是,如果我們將庫包含在使用MyFaces的JSF應用程序中,則會出現錯誤,如Exception: could not find Factory: javax.faces.context.FacesContextFactory中所述。
顯然,如果應用程序使用MyFaces,它必須使用myfaces-api.jar和myfaces-impl.jar(或相應的Maven代碼),and not jsf-api.jar or jsf-impl.jar。
這讓我有點困惑。
- 爲什麼Mojarra和MyFaces使用不同的API罐?兩者都實現相同的API(JSF),所以他們不應該使用相同的API罐?
- 我認爲具有獨立的「api」和「impl」罐子的全部意義在於只有「impl」部分必須轉換爲使用不同的實現。我誤解了什麼?
- 更具體地說:對於只應依賴於JSF API的庫來說,什麼是正確的Maven依賴關係?現在,我們依賴於jsf-api,並且使用MyFaces的項目必須使用
<exclusions>
來拋出jsf-api幷包含myfaces-api。這有效,但肯定有更好的方法?
我們使用的是JBoss AS提供的JSF jar,但是我們使用的是用於源代碼下載的jsf api的maven依賴項。下面是它的定義: org.jboss.spec.javax.faces 的jboss-JSF-api_2.1_spec 提供 –
2012-07-20 14:52:38