0 Replies Latest reply on Mar 22, 2018 11:32 PM by krmahadevan

    How do I add a resource to a Java archive using ShrinkWrap


      My use-case: I am basically adding tests to the open source library TestNG. As part of test, I need to test if TestNG is able to properly work with a jar file and extract out tests from it. Earlier we had a pre-built jar that was checked-in to the codebase and the tests were working with it. Then I came to know that I could use ShrinkWrap to dynamically create a jar.


      Here's the version information that I am working with

      • org.jboss.shrinkwrap:shrinkwrap-api:1.2.6
      • org.jboss.shrinkwrap:shrinkwrap-impl-base:1.2.6


      I am trying to basically add a few resources to a jar that I am creating using ShrinkWrap. The addition of resources works fine when I build the code locally on my Mac. But when I attempt to build the code via Travis (Travis is basically used as the CI tool for the open source library TestNG), the build keeps failing with the following error


      java.lang.IllegalArgumentException: src/test/resources/jarfileutils/testng-tests.xml was not found in any available ClassLoaders
        at org.jboss.shrinkwrap.impl.base.container.ContainerBase.addNestedJarFileResource(ContainerBase.java:811)
        at org.jboss.shrinkwrap.impl.base.container.ContainerBase.addAsResource(ContainerBase.java:1150)
        at org.testng.jarfileutils.JarCreator.generateJar(JarCreator.java:34)
        at org.testng.JarFileUtilsTest.generateTestJar(JarFileUtilsTest.java:30)


      Here's how my code looks like


      public class JarCreator {
         public static File generateJar() throws IOException {
        File jarFile = File.createTempFile("testng", ".jar");
        ConfigurationBuilder builder = new ConfigurationBuilder();
        Configuration config = builder
        JavaArchive archive = ShrinkWrap
        .create(JavaArchive.class, "testng-tests.jar")
         for (String resource : getResources()) {
        archive = archive.addAsResource(getFile(resource), new BasicPath(resource));
        archive.as(ZipExporter.class).exportTo(jarFile, true);
         return jarFile;
         private static File getFile(String resource) {
         return new File("src/test/resources/" + resource);
         private static Class[] getTestClasses() {
         return new Class[]{
        SampleTest5.class   };
         private static List getResources() {
         return Arrays.asList(
         "jarfileutils/childofchild/childofchild.xml"   );


      Here's how my folder structure looks like in src/test/resources


      08:56 $ tree src/test/resources/jarfileutils/
      ├── child
      │   ├── child.xml
      │   └── childofchild
      │       └── childofchild.xml
      ├── child.xml
      ├── childofchild
      │   └── childofchild.xml
      └── testng-tests.xml


      Can someone please let me know, if my code for creating a simple jar is correct or not.

      I have tried to examine the jar that gets created and it seems ok to me. But I dont know why I get the error only on Travis.


      In case anyone is interested, here's the complete travis log : https://api.travis-ci.org/v3/job/357213270/log.txt