import java.io.*;
import java.net.*;
import java.util.jar.*;

boolean result = true;

try
{
    System.out.println( "Creating JarFile java.io.File." );
    
    File jarFile = new File( basedir, "child2/target/child2-1.0-SNAPSHOT-jar-with-dependencies.jar" );
    
    System.out.println( "Checking for existence and file-ishness of: " + jarFile );
    
    if ( !jarFile.exists() || jarFile.isDirectory() )
    {
        System.err.println( "jar file is missing or a directory." );
        return false;
    }
    
    System.out.println( "Creating JarFile instance." );
    
    JarFile jf = new JarFile( jarFile );
    
    System.out.println( "Looking for 'test/AppChild1.class' jar entry." );
    
    if ( jf.getEntry( "test/AppChild1.class" ) == null )
    {
        System.err.println( "child1 class is missing." );
        result = false;
    }

    if ( jf.getEntry( "test/App.class" ) == null )
    {
        System.err.println( "child2 class is missing." );
        result = false;
    }
    
    System.out.println( "Looking for absence of 'junit/' jar entry." );
    
    if ( jf.getEntry( "junit/framework/TestCase.class" ) != null )
    {
        System.err.println( "junit jar should not be present." );
        result = false;
    }
    
}
catch( IOException e )
{
    e.printStackTrace();
    result = false;
}

return result;
