2015-04-29 32 views
2

我試圖在Maven項目用的Arquillian測試然而,在測試的每一個執行,讓我以下異常:的Arquillian:無法安裝的GlassFish嵌入式運行

Grave: Exception in command execution : java.lang.NoClassDefFoundError: javax/validation/ParameterNameProvider 
Tests run: 1, Failures: 0, Errors: 1, Skipped: 0, Time elapsed: 0.855 sec <<< FAILURE! 
Tests in error: 
es.costa.service.test.magali.PersonaFactorTest: Could not setup GlassFish Embedded Runtime 
Caused by: org.glassfish.embeddable.GlassFishException: PlainTextActionReporterFAILUREjava.lang.NoClassDefFoundError: javax/validation/ParameterNameProviderjava.lang.NoClassDefFoundError: javax/validation/ParameterNameProvider 
java.lang.RuntimeException: Could not setup GlassFish Embedded Runtime 

這是POM .XML:

<dependencyManagement> 
    <dependencies> 
     <dependency> 
      <groupId>org.jboss.arquillian</groupId> 
      <artifactId>arquillian-bom</artifactId> 
      <version>1.0.3.Final</version> 
      <scope>import</scope> 
      <type>pom</type> 
     </dependency> 
    </dependencies> 
</dependencyManagement> 
<dependencies> 
    <dependency> 
     <groupId>org.jboss.ejb3</groupId> 
     <artifactId>jboss-ejb3-ext-api</artifactId> 
     <version>2.1.0</version> 
    </dependency> 
    <dependency> 
     <groupId>es.costa</groupId> 
     <artifactId>costa-interfaces</artifactId> 
     <version>${project.version}</version> 
    </dependency> 
    <dependency> 
     <groupId>junit</groupId> 
     <artifactId>junit</artifactId> 
     <scope>test</scope> 
    </dependency> 

    <dependency> 
     <groupId>org.jboss.arquillian.junit</groupId> 
     <artifactId>arquillian-junit-container</artifactId> 
     <scope>test</scope> 
    </dependency> 
    <dependency> 
     <groupId>org.hibernate</groupId> 
     <artifactId>hibernate-validator</artifactId> 
     <version>5.1.3.Final</version> 
    </dependency> 
    <dependency> 
     <groupId>org.hibernate</groupId> 
     <artifactId>hibernate-validator-annotation-processor</artifactId> 
     <version>5.0.3.Final</version> 
    </dependency> 
</dependencies> 
<build> 
    <sourceDirectory>ejbModule/src/main/java</sourceDirectory> 
    <testSourceDirectory>ejbModule/src/test/java</testSourceDirectory> 
    <resources> 
     <resource> 
      <directory>ejbModule/src/main/resources</directory> 
      <excludes> 
       <exclude>**/*.java</exclude> 
      </excludes> 
     </resource> 
    </resources> 
    <testResources> 
     <testResource> 
      <directory>ejbModule/src/test/resources</directory> 
     </testResource> 
    </testResources> 
    <plugins> 
     <plugin> 
      <artifactId>maven-compiler-plugin</artifactId> 
      <version>${maven-compiler-plugin.version}</version> 
      <configuration> 
       <source>1.7</source> 
       <target>1.7</target> 
       <encoding>Cp1252</encoding> 
      </configuration> 
     </plugin> 
     <plugin> 
      <artifactId>maven-surefire-plugin</artifactId> 
      <version>2.12</version> 
     </plugin> 
     <plugin> 
      <artifactId>maven-ejb-plugin</artifactId> 
      <version>${maven-ejb-plugin.version}</version> 
      <configuration> 
       <ejbVersion>${ejb.version}</ejbVersion> 
      </configuration> 
     </plugin> 
     <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-shade-plugin</artifactId> 
      <executions> 
       <execution> 
        <phase>package</phase> 
        <goals> 
         <goal>shade</goal> 
        </goals> 
       </execution> 
      </executions> 
      <configuration> 
       <artifactSet> 
        <includes> 
         <include>es.costa</include> 
        </includes> 
       </artifactSet> 
       <finalName>${artifactId}-${project.version}</finalName> 
      </configuration> 
     </plugin> 


     <plugin> 
      <groupId>org.jboss.as.plugins</groupId> 
      <artifactId>jboss-as-maven-plugin</artifactId> 
      <configuration> 
       <filename>${artifactId}-${project.version}.jar</filename> 
      </configuration> 
     </plugin> 
    </plugins> 
</build> 
<profiles> 
    <profile> 
     <id>dev</id> 
     <activation> 
      <activeByDefault>true</activeByDefault> 
     </activation> 
     <dependencies> 
      <dependency> 
       <groupId>org.hibernate</groupId> 
       <artifactId>hibernate-entitymanager</artifactId> 
       <scope>test</scope> 
      </dependency> 
      <dependency> 
       <groupId>javax.persistence</groupId> 
       <artifactId>persistence-api</artifactId> 
       <version>${javax-persistance.version}</version> 
       <scope>test</scope> 
      </dependency> 
     </dependencies> 
    </profile> 
    <profile> 
     <id>jenkins</id> 
     <dependencies> 
      <dependency> 
       <groupId>org.hibernate</groupId> 
       <artifactId>hibernate-entitymanager</artifactId> 
       <scope>test</scope> 
      </dependency> 
      <dependency> 
       <groupId>javax.persistence</groupId> 
       <artifactId>persistence-api</artifactId> 
       <version>${javax-persistance.version}</version> 
       <scope>test</scope> 
      </dependency> 
     </dependencies> 
    </profile> 
    <profile> 
     <id>arquillian-glassfish-embedded</id> 
     <activation> 
      <activeByDefault>true</activeByDefault> 
     </activation> 
     <dependencies> 
      <dependency> 
       <groupId>org.jboss.arquillian.container</groupId> 
       <artifactId>arquillian-glassfish-embedded-3.1</artifactId> 
       <version>1.0.0.CR3</version> 
       <scope>test</scope> 
      </dependency> 
      <dependency> 
       <groupId>org.glassfish.main.extras</groupId> 
       <artifactId>glassfish-embedded-all</artifactId> 
       <version>3.1.2</version> 
       <scope>provided</scope> 
      </dependency> 
      <dependency> 
       <groupId>com.h2database</groupId> 
       <artifactId>h2</artifactId> 
       <version>1.3.166</version> 
       <scope>test</scope> 
      </dependency> 
     </dependencies> 
     <build> 
      <testResources> 
       <testResource> 
        <directory>ejbModule/src/test/resources</directory> 
       </testResource> 
       <testResource> 
        <directory>ejbModule/src/test/resources-glassfish-embedded</directory> 
       </testResource> 
      </testResources> 
      <plugins> 
       <plugin> 
        <artifactId>maven-surefire-plugin</artifactId> 
        <version>2.12</version> 
        <configuration> 
         <systemPropertyVariables> 
          <arquillian.launch>glassfish-embedded</arquillian.launch> 
          <java.util.logging.config.file> 
           ${project.build.testOutputDirectory}/logging.properties 
          </java.util.logging.config.file> 
          <derby.stream.error.file> 
           ${project.build.directory}/derby.log 
          </derby.stream.error.file> 
         </systemPropertyVariables> 
        </configuration> 
       </plugin> 
      </plugins> 
     </build> 
    </profile> 
</profiles> 

這是arquillian.xml

<?xml version="1.0" encoding="UTF-8"?> 
<arquillian xmlns="http://jboss.org/schema/arquillian" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xsi:schemaLocation=" 
    http://jboss.org/schema/arquillian 
    http://jboss.org/schema/arquillian/arquillian_1_0.xsd"> 

<container qualifier="glassfish-embedded" default="true"> 
    <configuration> 
     <property name="resourcesXml"> 
      ejbModule/src/test/resources-glassfish-embedded/glassfish-resources.xml 
     </property> 
    </configuration> 
</container>  

這是與GlassFish resources.xml中

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE resources PUBLIC 
"-//GlassFish.org//DTD GlassFish Application Server 3.1 Resource Definitions//EN" 
"http://glassfish.org/dtds/glassfish-resources_1_5.dtd"> 
<resources> 
<jdbc-resource pool-name="ArquillianEmbeddedH2Pool" 
    jndi-name="jdbc/arquillian"/> 
<jdbc-connection-pool name="ArquillianEmbeddedH2Pool" 
    res-type="javax.sql.DataSource" 
    datasource-classname="org.h2.jdbcx.JdbcDataSource"> 
    <property name="user" value="sa"/> 
    <property name="password" value=""/> 
    <property name="url" value="jdbc:h2:file:target/databases/h2/db"/> 
</jdbc-connection-pool>  

回答

0

有你的文件,我可以,甚至沒有嘗試你的代碼中看到的許多問題。文件中缺少許多必要的步驟和配置。

  1. 你沒有引用到的Arquillian容器從pom.xml

    <plugin> 
        <groupId>org.apache.maven.plugins</groupId> 
        <artifactId>maven-surefire-plugin</artifactId>      
        <configuration> 
         <systemPropertyVariables>        
          <arquillian.launch>glassfish-embedded</arquillian.launch> 
         </systemPropertyVariables> 
        </configuration> 
    </plugin> 
    
  2. 你應該確保在GlassFish容器屬性在arquillian.xml正確指定。例如:

    <property name="resourcesXml">src/test/resources/domain.xml</property> 
    <property name="glassFishHome">${glassfish.managed.home}</property> 
    

    您可以在https://docs.jboss.org/author/display/ARQ/GlassFish+3.1+-+Embedded

  3. 獲得性能的完整列表,請特別注意是否您在resourcesXml attrbiute指定glassfish-resources.xmldomain.xml。通常,您可以在應用程序戰爭中捆綁glassfish-resources.xml

我建議你參考:

  1. https://github.com/arquillian/arquillian-examples
  2. http://arquillian.org/guides/getting_started/
+0

首先感謝你回答我的帖子: 1)我沒有什麼意思的是什麼? 2)在GlassFish容器性質的int arquillian.xml – TinyOS

+0

說明第1點的正確指定:在聚甲醛。xml,arquillian容器需要知道要使用的實際容器,即glassfish,jboss等。它需要轉到arquillian.xml,然後閱讀容器屬性。這一步啓用了該鏈接。 – KDK

+0

我像你說的那樣添加了修改,但是它給了我同樣的錯誤,我改變了文件的位置:'glassfish-resources.xml'和'test-persistence.xml'和'logging.properties'到ejbModule/src/test/resources-glassfish-embedded源文件夾 – TinyOS

0

我刪除的代碼塊:

<dependency> 
    <groupId>org.hibernate</groupId> 
    <artifactId>hibernate-validator</artifactId> 
    <version>5.1.3.Final</version> 
</dependency> 
<dependency> 
    <groupId>org.hibernate</groupId> 
    <artifactId>hibernate-validator-annotation-processor</artifactId> 
    <version>5.0.3.Final</version> 
</dependency> 

,我認爲它解決了問題米,但現在我有其他錯誤消息:

ArquillianServletRunner not found. Could not determine ContextRoot from ProtocolMetadata, please contact DeployableContainer developer. 
+1

我在此: '.... JavaArchive罐= ShrinkWrap.create(JavaArchive.class, 「ES-科斯塔-Servi大街」) .addPackage(PersonFactory.class.getPackage()) .addPackage(IPersonFactoryLocal.class .getDackage()) .addAsManifestResource(「test-persistence.xml」,「META-INF/persistence.xml」) .addAsManifestResource(「jbossas-ds.xml」) .addAsManifestResource(EmptyAsset.INSTANCE,「beans。 XML「); ...' – TinyOS

+0

現在我有測試通過了succes,但是當我嘗試注入我的ejb在測試方法中使用一個systeme.out.println(IjectedEJB.getMessage);它給了我:'shouldFindAllGamesUsingJpqlQuery(es.costa.service.all.test.opa.IjectedEJBTest)' – TinyOS

相關問題