Uploaded image for project: 'ShrinkWrap Resolvers'
  1. ShrinkWrap Resolvers
  2. SHRINKRES-150

Wrong built WebArchive using Shrinkwrap Classpath resolution

    XMLWordPrintable

Details

    • Bug
    • Resolution: Unresolved
    • Major
    • None
    • 2.0.0
    • None
    • None

    Description

      Hi,

      I have defined a simple war project and setup an arquillian test using shrinkwrap 2.0.0, that - as a test - just resolves the web archive via classpath resolution:

      @RunWith(Arquillian.class)
      public class ShrinkwrapTestIT {
          @Deployment
          public static Archive<?> createDeployment() {
              WebArchive war = Maven.resolver()
                      .resolve("shrinkwrap.test:shrinkwrap.test:war:0.0.1-SNAPSHOT").withClassPathResolution(true)
                      .withoutTransitivity().asSingle(WebArchive.class);
              System.out.println(war.toString(true));
              return war;
          }
      
          @Test
          public void test() {
              //do nothing
          }
      }
      

      The output shows, that the archive is incomplete (resource files are missing) and not even war conform:
      some_text_file.txt
      com/
      com/test/
      com/test/Test.class

      If i change the code to use .withClassPathResolution(false), the output is:
      /some_text_file.txt
      /index.jsp
      /com/
      /com/test/
      /com/test/Test.class
      /WEB-INF/
      /WEB-INF/web.xml
      /WEB-INF/sun-web.xml
      /META-INF/
      /META-INF/MANIFEST.MF

      Now the resources are included, but the class(es) are packaged at the top level and not under /WEB-INF/classes, so it still doesnt respresent a valid war. My pom looks like:

      <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/xsd/maven-4.0.0.xsd">
          <modelVersion>4.0.0</modelVersion>
          <groupId>shrinkwrap.test</groupId>
          <artifactId>shrinkwrap.test</artifactId>
          <version>0.0.1-SNAPSHOT</version>
          <packaging>war</packaging>
      
          <properties>
              <project.build.sourceEncoding>ISO8859-1</project.build.sourceEncoding>
              <version.shrinkwrap.resolvers>2.0.0</version.shrinkwrap.resolvers>
          </properties>
      
          <dependencies>
              <!-- test dependencies -->
              <dependency>
                  <groupId>junit</groupId>
                  <artifactId>junit</artifactId>
                  <version>4.11</version>
              </dependency>
              <dependency>
                  <groupId>org.jboss.arquillian.junit</groupId>
                  <artifactId>arquillian-junit-container</artifactId>
                  <scope>test</scope>
              </dependency>
              <dependency>
                  <groupId>org.jboss.arquillian.container</groupId>
                  <artifactId>arquillian-glassfish-remote-3.1</artifactId>
                  <version>1.0.0.CR4</version>
                  <scope>test</scope>
              </dependency>
              <dependency>
                  <groupId>org.jboss.shrinkwrap.resolver</groupId>
                  <artifactId>shrinkwrap-resolver-depchain</artifactId>
                  <version>${version.shrinkwrap.resolvers}</version>
                  <scope>test</scope>
                  <type>pom</type>
              </dependency>
          </dependencies>
      
          <dependencyManagement>
              <dependencies>
                  <!-- Override dependency resolver with latest version. This must go *BEFORE*
                      the Arquillian BOM. -->
                  <dependency>
                      <groupId>org.jboss.shrinkwrap.resolver</groupId>
                      <artifactId>shrinkwrap-resolver-bom</artifactId>
                      <version>${version.shrinkwrap.resolvers}</version>
                      <scope>import</scope>
                      <type>pom</type>
                  </dependency>
                  <dependency>
                      <groupId>org.jboss.arquillian</groupId>
                      <artifactId>arquillian-bom</artifactId>
                      <version>1.1.1.Final</version>
                      <scope>import</scope>
                      <type>pom</type>
                  </dependency>
              </dependencies>
          </dependencyManagement>
      
          <build>
              <plugins>
                  <plugin>
                      <groupId>org.apache.maven.plugins</groupId>
                      <artifactId>maven-failsafe-plugin</artifactId>
                      <version>2.16</version>
                      <configuration>
                          <skipTests>${skipITs}</skipTests>
                      </configuration>
                      <executions>
                          <execution>
                              <goals>
                                  <goal>integration-test</goal>
                                  <goal>verify</goal>
                              </goals>
                          </execution>
                      </executions>
                  </plugin>
      
              </plugins>
          </build>
      </project>
      

      Why is shrinkwrap giving me corrupt archives here in both cases? For the case with classpath resolution i would expect shrinkwrap to give me the war, that was built by maven in the package phase? Without classpath resolution i would expect shrinkwrap to resolve the war from maven respository (local or remote). Or is my understanding of shrinkwrap (classpath) resolution wrong here?

      Attachments

        Activity

          People

            Unassigned Unassigned
            replicant77 Gunther Klein (Inactive)
            Votes:
            2 Vote for this issue
            Watchers:
            2 Start watching this issue

            Dates

              Created:
              Updated: