[shrinkwrap-issues] [JBoss JIRA] (SHRINKRES-150) Wrong built WebArchive using Shrinkwrap Classpath resolution

Gunther Klein (JIRA) jira-events at lists.jboss.org
Wed Oct 9 09:51:03 EDT 2013


     [ https://issues.jboss.org/browse/SHRINKRES-150?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Gunther Klein updated SHRINKRES-150:
------------------------------------

    Description: 
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:


{code:borderStyle=solid}
@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
    }
}
{code}

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?


  was:
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:

{code:title=ShrinkwrapTestIT.java|borderStyle=solid}
@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
    }
}
{code}

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?



    
> Wrong built WebArchive using Shrinkwrap Classpath resolution
> ------------------------------------------------------------
>
>                 Key: SHRINKRES-150
>                 URL: https://issues.jboss.org/browse/SHRINKRES-150
>             Project: ShrinkWrap Resolvers
>          Issue Type: Bug
>    Affects Versions: 2.0.0
>         Environment: win 7 (64 bit), glassfish 3.1.2
>            Reporter: Gunther Klein
>            Assignee: Andrew Rubinger
>
> 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:
> {code:borderStyle=solid}
> @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
>     }
> }
> {code}
> 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?

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira


More information about the shrinkwrap-issues mailing list