2012-12-12 27 views
1

我在Glassfish環境中使用Arquillian [1]對我的代碼進行了單元測試。如何避免在遠程Glassfish(嵌入式Glassfish作品)中運行Arquillian-Test的ClassNotFoundException?

我已經安裝了我的測試,以便在Glassfish嵌入式環境中運行時正常工作。但是,當我嘗試執行在遠程Glassfish的環境測試,都沒有發現Maven的依賴關係:

Exception while loading the app : java.lang.IllegalStateException: ContainerBase.addChild: start: org.apache.catalina.LifecycleException: java.lang.RuntimeException: java.lang.NoClassDefFoundError: Lorg/springframework/data/neo4j/support/Neo4jTemplate; 

我拆封從測試:

@Deployment 
public static WebArchive createDeployment() { 
    return ShrinkWrap.create(WebArchive.class).addPackages(true, "main.java") 
      .addAsWebInfResource(EmptyAsset.INSTANCE, ArchivePaths.create("beans.xml")); 
} 

要讓Maven依賴解決我使用shrinkwrap-resolver-bom:shrinkwrap-resolver-bom - 在我看來,當在遠程環境中運行測試時,maven依賴不在classpath中。

我上傳我的pom.xml到http://pastxt.com/P/9400A0KQSC

我怎樣才能讓我在Glassfish的遠程環境的測試運行?

[1] http://arquillian.org/

回答

2

具有拆封解析器BOM在你的POM是不足以使的Arquillian找到並添加Maven的文物到您的部署。 Maven BOM(物料清單)僅爲a container for related dependencies

要使用物料清單,您需要將物料清單導入dependencyManagement部分的項目POm中,並添加所需的相關性。要添加ShrinkWrap Maven解析器,您需要添加shrinkwrap-resolver-depchain測試依賴項。

您需要使用Maven解析器來解析您需要的依賴關係,然後將解析後的工件添加到ShrinkWrap存檔中。有關使用更新的ShrinkWrap Maven解析器(2.x)的更多細節在community FAQ post。請注意,Arquillian BOM(< = 1.0.3.Final)引入了較早版本的ShrinkWrap解析器,因此您需要注意所用ShrinkWrap Maven解析器的版本。