2015-06-12 28 views
6

運行測試時運行的Arquillian測試時,我收到以下錯誤java.util.ServiceConfigurationError使用的Arquillian + omnifaces

"java.util.ServiceConfigurationError: javax.servlet.ServletContainerInitializer: Provider org.omnifaces.ApplicationInitializer not found"

我已經把最基本的測試情況下,我可以在這裏:https://www.dropbox.com/s/kou5v8kqs5g4g4m/test.zip?dl=0

+0

您是使用Arquillian + Maven還是Arquillian獨立?這個問題至少說明了Arquillian的運行時類路徑中缺少OmniFaces庫。 – BalusC

+0

我使用Arquillian + Maven,雖然它看起來像一個類路徑問題,但怪異的部分是,org.omnifaces.ApplicationInitializer與META-INF/services/javax.servlet.ServletContainerInitializer位於同一個jar中,因爲該服務是是什麼導致ApplicationInitializer被加載。我發現了這個問題,很快就會發布解決方案。 – LoneWolf

回答

7

嘗試運行內置的戰爭和Wildfly獨立運行它後,我設法縮小問題的Arquillian,測試的Arquillian + Glassfish的嵌入式後並且運行沒有問題,我認爲問題是Arquillian + Wildfly,還有更多的使用Google搜索,我發現與使用嵌入Arquillian中的Wildfly相關的類似問題,以及Arquillian管理的Wildfly運行良好,這是我無法真正瞭解的原因看起來像某種錯誤,但也似乎在線上使用託管或遠程容器代替嵌入式代碼進行Arquillian測試。

因此該解決方案是非常簡單的只是移除了這個:

<dependency> 
     <groupId>org.wildfly</groupId> 
     <artifactId>wildfly-arquillian-container-embedded</artifactId> 
     <version>8.2.0.Final</version> 
     <scope>test</scope> 
    </dependency> 
    <dependency> 
     <groupId>org.wildfly</groupId> 
     <artifactId>wildfly-embedded</artifactId> 
     <version>8.2.0.Final</version> 
     <scope>provided</scope> 
    </dependency> 

,並將此:

<dependency> 
     <groupId>org.wildfly</groupId> 
     <artifactId>wildfly-arquillian-container-managed</artifactId> 
     <version>8.2.0.Final</version> 
     <scope>test</scope> 
    </dependency> 

該解決方案最終被不使用Wildfly嵌入的Arquillian,而是管理。