| import java.io.BufferedReader; |
| import java.io.File; |
| import java.io.IOException; |
| import java.util.jar.*; |
| import java.util.regex.*; |
| |
| import org.codehaus.plexus.util.*; |
| |
| try |
| { |
| File build; |
| File mavenBuild; |
| File mavenBuildProperties; |
| |
| // Webapp project |
| |
| build = new File( basedir, "build.xml" ); |
| if ( build.isDirectory() || !build.exists() ) |
| { |
| System.err.println( "The file '" + build.getAbsolutePath() + "' is a directory or doesn't exist." ); |
| return false; |
| } |
| |
| mavenBuild = new File( basedir, "maven-build.xml" ); |
| if ( mavenBuild.isDirectory() || !mavenBuild.exists() ) |
| { |
| System.err.println( "The file '" + mavenBuild.getAbsolutePath() + "' is a directory or doesn't exist." ); |
| return false; |
| } |
| |
| String xml = FileUtils.fileRead( mavenBuild, "UTF-8" ); |
| Matcher m0 = Pattern.compile( "<copy\\s+file\\s*=\\s*\\Q\"${maven.repo.local}/log4j/log4j/1.2.14/log4j-1.2.14.jar\"\\E" |
| + "\\s*todir\\s*=\\s*\\Q\"${maven.build.dir}/${maven.build.finalName}/WEB-INF/lib\"\\E" ).matcher( xml ); |
| System.out.println( "Checking for existence of <copy> from ${maven.repo.local} for WAR libs" ); |
| if ( !m0.find() ) |
| { |
| System.err.println( "FAILED!\n" + xml ); |
| return false; |
| } |
| |
| mavenBuildProperties = new File( basedir, "maven-build.properties" ); |
| if ( mavenBuildProperties.isDirectory() || !mavenBuildProperties.exists() ) |
| { |
| System.err.println( "The file '" + mavenBuildProperties.getAbsolutePath() + "' is a directory or doesn't exist." ); |
| return false; |
| } |
| |
| warFile = new File( basedir, "target/ant-webapp-test.war" ); |
| System.out.println( "Checking for existence of WAR file: " + warFile ); |
| if ( !warFile.isFile() ) |
| { |
| System.err.println( "FAILED!" ); |
| return false; |
| } |
| |
| JarFile war = new JarFile( warFile ); |
| |
| String[] expected = { |
| "index.jsp", |
| "WEB-INF/web.xml", |
| "WEB-INF/test.txt", |
| "WEB-INF/classes/test.properties", |
| "WEB-INF/classes/org/MyClass.class", |
| "WEB-INF/lib/log4j-1.2.14.jar", |
| "WEB-INF/lib/maven-model-2.0.6.jar", |
| "WEB-INF/lib/plexus-utils-1.4.1.jar", |
| }; |
| for ( String entry : expected ) |
| { |
| System.out.println( "Checking for existence of WAR file entry: " + entry ); |
| if ( war.getEntry( entry ) == null ) |
| { |
| System.err.println( "FAILED!" ); |
| return false; |
| } |
| |
| System.out.println( "Checking for uniqueness of WAR file entry: " + entry ); |
| int count = 0; |
| for ( Enumeration en = war.entries(); en.hasMoreElements(); ) |
| { |
| JarEntry je = (JarEntry) en.nextElement(); |
| if ( entry.equals( je.getName() ) ) |
| { |
| count++; |
| } |
| } |
| if ( count != 1 ) |
| { |
| System.err.println( "FAILED! " + count ); |
| return false; |
| } |
| } |
| |
| String[] unexpected = { |
| "org/MyClass.class", |
| }; |
| for ( String entry : unexpected ) |
| { |
| System.out.println( "Checking for absence of WAR file entry: " + entry ); |
| if ( war.getEntry( entry ) != null ) |
| { |
| System.err.println( "FAILED!" ); |
| return false; |
| } |
| } |
| |
| war.close(); |
| } |
| catch( Throwable t ) |
| { |
| t.printStackTrace(); |
| return false; |
| } |
| |
| return true; |