7 Replies Latest reply: Jan 21, 2010 1:20 PM by Joshua Davis RSS

    Trying out the full classpath example

    Joshua Davis Expert

      I was able to spend some time trying out the 'full classpath' Maven example in the past few days.  I ran into a snag though.   The surefire plugin configuration specifies -Djboss.home=${JBOSS_HOME}, but my start up code thinks the system property is not set.   I tried running my example test inside my IDE, specifying -Djboss.home and it worked fine.

       

      Why isn't surefire paying attention to the <argLine>?

        • 1. Re: Trying out the full classpath example
          Andrew Rubinger Master
          Just so we can be sure, print the relevant output from Maven using "-X"?
          • 2. Re: Trying out the full classpath example
            Joshua Davis Expert
            Hang on, I think it's trying to run the code in the 'test' phase instead of the 'integration-test' phase.   Maven... feh.
            • 3. Re: Trying out the full classpath example
              Joshua Davis Expert

              That's it.... Maven is running the 'test' phase first.   That uses the default surefire config which has no <argLine>.

               

              I have two unit tests in two packages:

              • eg.test.unit - Regular unit test.   Should run during the 'test' phase.
              • eg.test.integration - Embedded tests.   Should run only during the 'integration-test' phase.

               

              I thought this would work:

               

                          <plugin>

                              <artifactId>maven-surefire-plugin</artifactId>

                              <executions>

                                  <execution>

                                      <id>test</id>

                                      <phase>test</phase>

                                      <goals><goal>test</goal></goals>

                                      <configuration>

                                          <includes>

                                              <include>**/test/unit/*Test.java</include>

                                          </includes>

                                      </configuration>                       

                                  </execution>

                                  <execution>

                                      <id>integration-test</id>

                                      <phase>integration-test</phase>

                                      <goals>

                                          <goal>test</goal>

                                      </goals>

                                      <configuration>

                                          <additionalClasspathElements>

                                              <additionalClasspathElement>${JBOSS_HOME}/client/jbossws-native-client.jar

                                              </additionalClasspathElement>

                                          </additionalClasspathElements>

                                          <redirectTestOutputToFile>true</redirectTestOutputToFile>

                                          <trimStackTrace>false</trimStackTrace>

                                          <printSummary>true</printSummary>

                                          <includes>

                                              <include>**/test/integration/*Test.java</include>

                                          </includes>

                                          <forkMode>always</forkMode>

                                          <!--

                                            MaxPermSize Required to bump the space for relective

                                            data like classes, methods, etc. EMB-41, EMB-74. Endorsed

                                            required for things like WS support (EMB-61)

                                          -->

                                          <argLine>-Xmx512m -XX:MaxPermSize=256m -Djava.net.preferIPv4Stack=true -Djava.endorsed.dirs=${JBOSS_HOME}/lib/endorsed -Djboss.home=${JBOSS_HOME}</argLine>

                                      </configuration>

                                  </execution>

                              </executions>

                          </plugin>

              • 4. Re: Trying out the full classpath example
                Andrew Rubinger Master

                So all set?

                 

                S,

                ALR

                • 5. Re: Trying out the full classpath example
                  Joshua Davis Expert

                  Nope.  The surefire plugin either runs the integration test as a unit test, or it runs no tests whatsoever.   Might be because I'm using TestNG rather than JUnit though.

                  • 6. Re: Trying out the full classpath example
                    Andrew Rubinger Master

                    You can have Surefire run in both phases, but you need to configure the 2nd phase as a profile.

                     

                    For example:

                     

                    http://anonsvn.jboss.org/repos/jbossas/projects/ejb-book/trunk/ch08-statusupdate/pom.xml

                     

                    That one above inherits the regular unit tests "test" phase from ../build/pom.xml, and also defines the integration-test one in the "it" profile.  To get it to run automatically remember to set "activeByDefault".

                     

                    S,

                    ALR

                    • 7. Re: Trying out the full classpath example
                      Joshua Davis Expert

                      Okay, tried the profile approach.   I made two TestNG groups: 'unit-test' and 'integration-test' and specified the unit-test group in the main surefire plugin config and integration-test in the 'it' profile config.  When I do 'mvn install' it runs the unit tests like I expect.  Then it unpacks JBoss AS, tries to run the integration tests but doesn't actually do anything.  Grrr.


                          <profiles>

                              <profile>

                                  <id>it</id>

                                  <activation>

                                      <activeByDefault>true</activeByDefault>

                                  </activation>

                                  <build>

                                      <plugins>

                                          <!-- Get AS and put into "target" -->

                                          <plugin>

                                              <groupId>org.apache.maven.plugins</groupId>

                                              <artifactId>maven-dependency-plugin</artifactId>

                                              <executions>

                                                  <execution>

                                                      <id>unpack</id>

                                                      <phase>pre-integration-test</phase>

                                                      <!-- So run before testing -->

                                                      <goals>

                                                          <goal>unpack</goal>

                                                      </goals>

                                                      <configuration>

                                                          <artifactItems>

                                                              <artifactItem>

                                                                  <groupId>org.jboss.jbossas</groupId>

                                                                  <artifactId>jboss-as-distribution</artifactId>

                                                                  <version>${version.org.jboss.jbossas}</version>

                                                                  <type>zip</type>

                                                                  <overWrite>false</overWrite>

                                                                  <outputDirectory>${project.build.directory}</outputDirectory>

                                                              </artifactItem>

                                                          </artifactItems>

                                                      </configuration>

                                                  </execution>

                                              </executions>

                                          </plugin>

                                          <plugin>

                                              <artifactId>maven-surefire-plugin</artifactId>

                                              <executions>

                                                  <execution>

                                                      <id>integration-test</id>

                                                      <phase>integration-test</phase>

                                                      <goals>

                                                          <goal>test</goal>

                                                      </goals>

                                                      <configuration>

                                                          <excludedGroups>unit-test</excludedGroups>

                                                          <groups>integration-test</groups>

                                                          <additionalClasspathElements>

                                                              <additionalClasspathElement>${JBOSS_HOME}/client/jbossws-native-client.jar

                                                              </additionalClasspathElement>

                                                          </additionalClasspathElements>

                                                          <redirectTestOutputToFile>true</redirectTestOutputToFile>

                                                          <trimStackTrace>false</trimStackTrace>

                                                          <printSummary>true</printSummary>

                                                          <forkMode>always</forkMode>

                                                          <!--

                                                            MaxPermSize Required to bump the space for relective

                                                            data like classes, methods, etc. EMB-41, EMB-74. Endorsed

                                                            required for things like WS support (EMB-61)

                                                          -->

                                                          <argLine>-Xmx512m -XX:MaxPermSize=256m -Djava.net.preferIPv4Stack=true

                                                              -Djava.endorsed.dirs=${JBOSS_HOME}/lib/endorsed -Djboss.home=${JBOSS_HOME}

                                                          </argLine>

                                                      </configuration>

                                                  </execution>

                                              </executions>

                                          </plugin>

                                      </plugins>

                                  </build>

                              </profile>

                          </profiles>

                          <build>

                              <plugins>

                                  <plugin>

                                      <groupId>org.apache.maven.plugins</groupId>

                                      <artifactId>maven-compiler-plugin</artifactId>

                                      <configuration>

                                          <source>${compileSource}</source>

                                          <target>${compileSource}</target>

                                      </configuration>

                                  </plugin>

                                  <plugin>

                                      <artifactId>maven-surefire-plugin</artifactId>

                                      <configuration>

                                          <excludedGroups>integration-test</excludedGroups>

                                          <groups>unit-test</groups>

                                      </configuration>

                                  </plugin>

                              </plugins>

                          </build>