TestNG: Difference between test classpath & surefire test classpath
fenixx Apr 15, 2009 9:52 PMHi all,
I have a question about the execution of a TestNG test in the Embedded JBoss with Maven:
If I am executing an TestNG test with Maven(Surefire plugin) which classpath is important:
The surefire test classpath or the test classpath?
I want to illustrate the problem. Here is my pom.xml:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<parent>
<groupId>com.mypackage</groupId>
<artifactId>myproject-all</artifactId>
<version>${myproject.version}</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<groupId>com.mypackage</groupId>
<artifactId>myproject-ejb</artifactId>
<packaging>ejb</packaging>
<name>MYPROJECT EJB</name>
<build>
<!-- resources>
<resource>
<directory>${myproject.home}/${myproject.release}/src/main/resources</directory>
<includes>
<include>**/*</include>
</includes>
<filtering>true</filtering>
</resource>
</resources-->
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-ejb-plugin</artifactId>
<configuration>
<ejbVersion>3.0</ejbVersion>
<generateClient>true</generateClient>
<archive>
<manifest>
<addDefaultSpecificationEntries>true</addDefaultSpecificationEntries>
<addDefaultImplementationEntries>true</addDefaultImplementationEntries>
<addClasspath>true</addClasspath>
<classpathPrefix>lib/</classpathPrefix>
</manifest>
<manifestEntries>
<Class-Path>lib/myproject-server.jar</Class-Path>
</manifestEntries>
</archive>
</configuration>
</plugin>
<!-- Surefire -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.4.3</version>
<configuration>
<useManifestOnlyJar>false</useManifestOnlyJar>
<additionalClasspathElements>
<additionalClasspathElement>${myproject.home}/myproject-ejb/bootstrap</additionalClasspathElement>
</additionalClasspathElements>
<forkMode>once</forkMode>
<jvm>${myproject.java}</jvm>
<argLine>-Dsun.lang.ClassLoader.allowArraySyntax=true</argLine>
</configuration>
</plugin>
<!-- ==================== -->
</plugins>
</build>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>javax.transaction</groupId>
<artifactId>jta</artifactId>
<version>1.0.1B</version>
<scope>provided</scope>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<!-- Embedded JBoss dependencies
These make me a tad nervous because there are duplicate libraries on the test classpath.
However, Maven gives you no way to tare the classpath to zero and start fresh. -->
<dependency>
<groupId>org.jboss.seam.embedded</groupId>
<artifactId>jboss-embedded-all</artifactId>
<version>beta3.SP4</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.jboss.seam.embedded</groupId>
<artifactId>hibernate-all</artifactId>
<version>beta3.SP4</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.jboss.seam.embedded</groupId>
<artifactId>thirdparty-all</artifactId>
<version>beta3.SP4</version>
<scope>test</scope>
</dependency>
<!-- /Embedded JBoss dependencies -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>2.5</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.ejb</groupId>
<artifactId>ejb-api</artifactId>
<version>3.0</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.el</groupId>
<artifactId>el-api</artifactId>
<version>1.0</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.jboss.el</groupId>
<artifactId>jboss-el</artifactId>
<version>2.0.1.GA</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>com.sun.facelets</groupId>
<artifactId>jsf-facelets</artifactId>
<version>1.1.14</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>javax.faces</groupId>
<artifactId>jsf-api</artifactId>
<version>1.2_09-BETA1</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.faces</groupId>
<artifactId>jsf-impl</artifactId>
<version>1.2_12</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.persistence</groupId>
<artifactId>persistence-api</artifactId>
<version>1.0</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-validator</artifactId>
<version>3.0.0.GA</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>org.jboss.seam</groupId>
<artifactId>jboss-seam</artifactId>
<version>2.1.1.GA</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.jboss.seam</groupId>
<artifactId>jboss-seam-debug</artifactId>
<version>2.1.1.GA</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.testng</groupId>
<artifactId>testng</artifactId>
<version>5.6</version>
<scope>test</scope>
</dependency>
</dependencies>
</project>If I am executing the test with Maven now, I get this error:
CONTEXTS MISSING DEPENDENCIES: Name -> Dependency{Required State:Actual State}
jboss.j2ee:jar=classes,name=BeanA,service=EJB3
-> <UNKNOWN>{Described: UNRESOLVED Demands 'persistence.units:jar=classes.jar,unitName=MYPROJ }
jboss.j2ee:jar=classes,name=BeanB,service=EJB3
-> <UNKNOWN>{Described: UNRESOLVED Demands 'persistence.units:jar=classes.jar,unitName=MYPROJ }
jboss.j2ee:jar=classes,name=BeanC,service=EJB3
-> <UNKNOWN>{Described: UNRESOLVED Demands 'persistence.units:jar=classes.jar,unitName=MYPROJ }
persistence.units:jar=classes.jar,unitName=MYPROJ
-> <UNKNOWN>{Described: UNRESOLVED Demands 'jboss.jca:name=jdbc/MYPROJ,service=DataSourceBinding }
CONTEXTS IN ERROR: Name -> Error
<UNKNOWN> -> UNRESOLVED Demands 'jboss.jca:name=jdbc/myproj,service=DataSourceBinding
]]>
</message>
<full-stacktrace>
<![CDATA[org.jboss.deployers.client.spi.IncompleteDeploymentException: Summary of incomplete deployments (SEE PREVIOUS ERRORS FOR DETAILS):
CONTEXTS MISSING DEPENDENCIES: Name -> Dependency{Required State:Actual State}
jboss.j2ee:jar=classes,name=BeanA,service=EJB3
-> <UNKNOWN>{Described: UNRESOLVED Demands 'persistence.units:jar=classes.jar,unitName=MYPROJ }
jboss.j2ee:jar=classes,name=BeanB,service=EJB3
-> <UNKNOWN>{Described: UNRESOLVED Demands 'persistence.units:jar=classes.jar,unitName=MYPROJ }
persistence.units:jar=classes.jar,unitName=MYPROJ
-> <UNKNOWN>{Described: UNRESOLVED Demands 'jboss.jca:name=jdbc/myproj,service=DataSourceBinding }
CONTEXTS IN ERROR: Name -> Error
<UNKNOWN> -> UNRESOLVED Demands 'jboss.jca:name=jdbc/myproj,service=DataSourceBindingNow the the extract of the test classpath:
[DEBUG] (f) reportsDirectory = C:\Projects\My_project\main\Sourcen_maven\myproject-ejb\target\surefire-reports [DEBUG] (f) session = org.apache.maven.execution.MavenSession@157c2bd [DEBUG] (f) testClassesDirectory = C:\Projects\My_project\main\Sourcen_maven\myproject-ejb\target\test-classes [DEBUG] (f) testNGArtifactName = org.testng:testng [DEBUG] (f) testSourceDirectory = C:\Projects\My_project\main\Sourcen_maven\myproject-ejb\src\test\java [DEBUG] (f) trimStackTrace = true [DEBUG] (f) useFile = true [DEBUG] (f) useManifestOnlyJar = false [DEBUG] (f) workingDirectory = C:\Projects\My_project\main\Sourcen_maven\myproject-ejb [DEBUG] -- end configuration -- [INFO] [surefire:test] [DEBUG] Setting context classloader for plugin to: /plugins/org.apache.maven.plugins:maven-surefire-plugin:2.4.3@48/thread:main (instance is: ClassRealm[/plugins/org.apache.maven.plugins:maven-surefire-plugin:2.4.3@48/thread:main, parent: ClassRealm[plexus.core, parent: null]]) [DEBUG] dummy:dummy:jar:1.0 (selected for null) [DEBUG] org.apache.maven.surefire:surefire-booter:jar:2.4.3:runtime (selected for runtime) [DEBUG] org.apache.maven.surefire:surefire-api:jar:2.4.3:runtime (selected for runtime) [DEBUG] Adding to surefire booter test classpath: c:\Projects\javalibs\MavenRepository\org\apache\maven\surefire\surefire-booter\2.4.3\surefire-booter-2.4.3.jar [DEBUG] Adding to surefire booter test classpath: c:\Projects\javalibs\MavenRepository\org\apache\maven\surefire\surefire-api\2.4.3\surefire-api-2.4.3.jar [DEBUG] dummy:dummy:jar:1.0 (selected for null) [DEBUG] org.testng:testng:jar:5.6:test (selected for test) [DEBUG] junit:junit:jar:3.8.1:test (selected for test) [DEBUG] Adding to surefire booter test classpath: c:\Projects\javalibs\MavenRepository\org\testng\testng\5.6\testng-5.6.jar [DEBUG] Adding to surefire booter test classpath: c:\Projects\javalibs\MavenRepository\junit\junit\3.8.1\junit-3.8.1.jar [DEBUG] dummy:dummy:jar:1.0 (selected for null) [DEBUG] Adding managed dependencies for unknown:surefire-testng [DEBUG] org.apache.maven.surefire:surefire-api:jar:2.4.3 [DEBUG] org.apache.maven.surefire:surefire-booter:jar:2.4.3 [DEBUG] org.codehaus.plexus:plexus-utils:jar:1.5.1 [DEBUG] org.apache.maven.surefire:surefire-testng:jar:2.4.3:test (selected for test) [DEBUG] junit:junit:jar:3.8.1:test (selected for test) [DEBUG] org.apache.maven.surefire:surefire-api:jar:2.4.3:test (selected for test) [DEBUG] org.apache.maven:maven-artifact:jar:2.0:test (selected for test) [DEBUG] org.codehaus.plexus:plexus-utils:jar:1.0.4:test (selected for test) [DEBUG] org.testng:testng:jar:jdk15:5.7:test (selected for test) [DEBUG] Adding to surefire test classpath: c:\Projects\javalibs\MavenRepository\org\apache\maven\surefire\surefire-testng\2.4.3\surefire-testng-2.4.3.jar [DEBUG] Adding to surefire test classpath: c:\Projects\javalibs\MavenRepository\junit\junit\3.8.1\junit-3.8.1.jar [DEBUG] Adding to surefire test classpath: c:\Projects\javalibs\MavenRepository\org\apache\maven\surefire\surefire-api\2.4.3\surefire-api-2.4.3.jar [DEBUG] Adding to surefire test classpath: c:\Projects\javalibs\MavenRepository\org\apache\maven\maven-artifact\2.0\maven-artifact-2.0.jar [DEBUG] Adding to surefire test classpath: c:\Projects\javalibs\MavenRepository\org\codehaus\plexus\plexus-utils\1.0.4\plexus-utils-1.0.4.jar [DEBUG] Test Classpath : [DEBUG] C:\Projects\My_project\main\Sourcen_maven\myproject-ejb\target\test-classes [DEBUG] C:\Projects\My_project\main\Sourcen_maven\myproject-ejb\target\classes [DEBUG] c:\Projects\javalibs\MavenRepository\junit\junit\4.0\junit-4.0.jar [DEBUG] c:\Projects\javalibs\MavenRepository\log4j\log4j\1.2.14\log4j-1.2.14.jar [DEBUG] c:\Projects\javalibs\MavenRepository\org\jboss\seam\embedded\jboss-embedded-all\beta3.SP4\jboss-embedded-all-beta3.SP4.jar [DEBUG] c:\Projects\javalibs\MavenRepository\org\jboss\seam\embedded\jboss-embedded-api\beta3.SP4\jboss-embedded-api-beta3.SP4.jar [DEBUG] c:\Projects\javalibs\MavenRepository\org\jboss\microcontainer\jboss-deployers-client-spi\2.0.0.Beta6\jboss-deployers-client-spi-2.0.0.Beta6.jar [DEBUG] c:\Projects\javalibs\MavenRepository\org\jboss\microcontainer\jboss-deployers-core-spi\2.0.0.Beta6\jboss-deployers-core-spi-2.0.0.Beta6.jar [DEBUG] c:\Projects\javalibs\MavenRepository\org\jboss\seam\embedded\hibernate-all\beta3.SP4\hibernate-all-beta3.SP4.jar [DEBUG] c:\Projects\javalibs\MavenRepository\org\jboss\seam\embedded\thirdparty-all\beta3.SP4\thirdparty-all-beta3.SP4.jar [DEBUG] c:\Projects\javalibs\MavenRepository\javax\servlet\servlet-api\2.5\servlet-api-2.5.jar [DEBUG] c:\Projects\javalibs\MavenRepository\javax\ejb\ejb-api\3.0\ejb-api-3.0.jar [DEBUG] c:\Projects\javalibs\MavenRepository\javax\el\el-api\1.0\el-api-1.0.jar [DEBUG] c:\Projects\javalibs\MavenRepository\org\jboss\el\jboss-el\2.0.1.GA\jboss-el-2.0.1.GA.jar [DEBUG] c:\Projects\javalibs\MavenRepository\com\sun\facelets\jsf-facelets\1.1.14\jsf-facelets-1.1.14.jar [DEBUG] c:\Projects\javalibs\MavenRepository\javax\faces\jsf-api\1.2_09-BETA1\jsf-api-1.2_09-BETA1.jar [DEBUG] c:\Projects\javalibs\MavenRepository\javax\faces\jsf-impl\1.2_12\jsf-impl-1.2_12.jar [DEBUG] c:\Projects\javalibs\MavenRepository\javax\persistence\persistence-api\1.0\persistence-api-1.0.jar [DEBUG] c:\Projects\javalibs\MavenRepository\org\hibernate\hibernate-validator\3.0.0.GA\hibernate-validator-3.0.0.GA.jar [DEBUG] c:\Projects\javalibs\MavenRepository\org\hibernate\hibernate\3.2.4.sp1\hibernate-3.2.4.sp1.jar [DEBUG] c:\Projects\javalibs\MavenRepository\net\sf\ehcache\ehcache\1.2.3\ehcache-1.2.3.jar [DEBUG] c:\Projects\javalibs\MavenRepository\commons-logging\commons-logging\1.0.4\commons-logging-1.0.4.jar [DEBUG] c:\Projects\javalibs\MavenRepository\commons-collections\commons-collections\2.1.1\commons-collections-2.1.1.jar [DEBUG] c:\Projects\javalibs\MavenRepository\javax\transaction\jta\1.0.1B\jta-1.0.1B.jar [DEBUG] c:\Projects\javalibs\MavenRepository\asm\asm-attrs\1.5.3\asm-attrs-1.5.3.jar [DEBUG] c:\Projects\javalibs\MavenRepository\dom4j\dom4j\1.6.1\dom4j-1.6.1.jar [DEBUG] c:\Projects\javalibs\MavenRepository\antlr\antlr\2.7.6\antlr-2.7.6.jar [DEBUG] c:\Projects\javalibs\MavenRepository\cglib\cglib\2.1_3\cglib-2.1_3.jar [DEBUG] c:\Projects\javalibs\MavenRepository\asm\asm\1.5.3\asm-1.5.3.jar [DEBUG] c:\Projects\javalibs\MavenRepository\org\jboss\seam\jboss-seam\2.1.1.GA\jboss-seam-2.1.1.GA.jar [DEBUG] c:\Projects\javalibs\MavenRepository\org\jboss\seam\jboss-seam-debug\2.1.1.GA\jboss-seam-debug-2.1.1.GA.jar [DEBUG] c:\Projects\javalibs\MavenRepository\org\jboss\seam\jboss-seam\2.1.1.GA\jboss-seam-2.1.1.GA.jar [DEBUG] c:\Projects\javalibs\MavenRepository\org\testng\testng\5.6\testng-5.6.jar [DEBUG] c:\Projects\javalibs\MavenRepository\org\apache\axis\axis\1.4\axis-1.4.jar [DEBUG] c:\Projects\javalibs\MavenRepository\org\apache\axis\axis-jaxrpc\1.4\axis-jaxrpc-1.4.jar [DEBUG] C:/Projects/My_project/main/Sourcen_maven/myproject-ejb/bootstrap [DEBUG] Setting system property [user.dir]=[C:\Projects\My_project\main\Sourcen_maven\myproject-ejb] [DEBUG] Setting system property [localRepository]=[c:/Projects/javalibs/MavenRepository] [DEBUG] Setting system property [basedir]=[C:\Projects\My_project\main\Sourcen_maven\myproject-ejb] [INFO] Surefire report directory: C:\Projects\My_project\main\Sourcen_maven\myproject-ejb\target\surefire-reports
As you see: The embedded jars are included in the test classpath, but not in the surefire test classpath.
Therefore my question: Should be the embedded jars included by the surefire test classpath as well? If yes: How can you configurate it correctly?