brett 2005/03/17 15:59:07
Modified: maven-plugins/maven-assemble-plugin/src/main/java/org/apache/maven/plugin/assemble AssembleMojo.java maven-plugins/maven-assemble-plugin pom.xml maven-mboot2/src/main/java MBoot.java Log: flesh out assemble mojo Revision Changes Path 1.2 +44 -24 maven-components/maven-plugins/maven-assemble-plugin/src/main/java/org/apache/maven/plugin/assemble/AssembleMojo.java Index: AssembleMojo.java =================================================================== RCS file: /home/cvs/maven-components/maven-plugins/maven-assemble-plugin/src/main/java/org/apache/maven/plugin/assemble/AssembleMojo.java,v retrieving revision 1.1 retrieving revision 1.2 diff -u -r1.1 -r1.2 --- AssembleMojo.java 13 Mar 2005 01:37:59 -0000 1.1 +++ AssembleMojo.java 17 Mar 2005 23:59:06 -0000 1.2 @@ -22,25 +22,18 @@ import org.apache.maven.plugins.assemble.model.Assembly; import org.apache.maven.plugins.assemble.model.FileSet; import org.apache.maven.plugins.assemble.model.io.xpp3.AssemblyXpp3Reader; -import org.codehaus.plexus.util.FileUtils; -import org.codehaus.plexus.util.StringUtils; +import org.codehaus.plexus.archiver.Archiver; +import org.codehaus.plexus.archiver.tar.TarArchiver; import java.io.File; import java.io.FileReader; import java.util.Iterator; -import java.util.List; /** * @author <a href="mailto:[EMAIL PROTECTED]">Brett Porter</a> * @version $Id$ * @goal assemble * @description assemble an application bundle or distribution - * @parameter name="buildDirectory" - * type="String" - * required="true" - * validator="" - * expression="#project.build.directory/assembly" - * description="" * @parameter name="outputDirectory" type="String" required="true" validator="" expression="#project.build.directory" description="" * @parameter name="descriptor" type="String" required="true" validator="" expression="#maven.assemble.descriptor" description="" * @parameter name="finalName" type="String" required="true" validator="" expression="#project.build.finalName" description="" @@ -48,41 +41,68 @@ public class AssembleMojo extends AbstractPlugin { + private static final String[] EMPTY_STRING_ARRAY = {}; + public void execute( PluginExecutionRequest request, PluginExecutionResponse response ) throws Exception { // TODO: align all to basedir String outputDirectory = (String) request.getParameter( "outputDirectory" ); - String buildDirectory = (String) request.getParameter( "buildDirectory" ); String descriptor = (String) request.getParameter( "descriptor" ); String finalName = (String) request.getParameter( "finalName" ); AssemblyXpp3Reader reader = new AssemblyXpp3Reader(); Assembly assembly = reader.read( new FileReader( new File( descriptor ) ) ); - // TODO: include in bootstrap // TODO: include dependencies marked for distribution under certain formats // TODO: have a default set of descriptors that can be used instead of the file String fullName = finalName + "-" + assembly.getId(); - File outputBase = new File( buildDirectory, fullName ); - outputBase.mkdirs(); - for ( Iterator i = assembly.getFilesets().iterator(); i.hasNext(); ) + for ( Iterator i = assembly.getFormats().iterator(); i.hasNext(); ) { - FileSet fileset = (FileSet) i.next(); - String directory = fileset.getDirectory(); - String output = fileset.getOutputDirectory(); - if ( output == null ) + String format = (String) i.next(); + + String filename = fullName + "." + format; + + // TODO: use component roles? Can we do that in a mojo? + Archiver archiver; + if ( format.startsWith( "tar" ) ) + { + TarArchiver tarArchiver = new TarArchiver(); + archiver = tarArchiver; + int index = format.indexOf( '.' ); + if ( index >= 0 ) + { + // TODO: this needs a cleanup in plexus archiver - use a real typesafe enum + TarArchiver.TarCompressionMethod tarCompressionMethod = new TarArchiver.TarCompressionMethod(); + tarCompressionMethod.setValue( format.substring( index + 1 ) ); + tarArchiver.setCompression( tarCompressionMethod ); + } + } + else { - output = directory; + // TODO: better handling + throw new IllegalArgumentException( "Unknown format: " + format ); } - // TODO: includes/excludes + for ( Iterator j = assembly.getFilesets().iterator(); j.hasNext(); ) + { + FileSet fileset = (FileSet) j.next(); + String directory = fileset.getDirectory(); + String output = fileset.getOutputDirectory(); + if ( output == null ) + { + output = directory; + } + + String[] includes = (String[]) fileset.getIncludes().toArray( EMPTY_STRING_ARRAY ); + String[] excludes = (String[]) fileset.getExcludes().toArray( EMPTY_STRING_ARRAY ); + archiver.addDirectory( new File( directory ), output, includes, excludes ); + } - FileUtils.copyDirectoryStructure( new File( directory ), new File( outputBase, output )); + archiver.setDestFile( new File( outputDirectory, filename ) ); + archiver.createArchive(); } - - // TODO: package it up } } 1.4 +7 -6 maven-components/maven-plugins/maven-assemble-plugin/pom.xml Index: pom.xml =================================================================== RCS file: /home/cvs/maven-components/maven-plugins/maven-assemble-plugin/pom.xml,v retrieving revision 1.3 retrieving revision 1.4 diff -u -r1.3 -r1.4 --- pom.xml 15 Mar 2005 22:31:54 -0000 1.3 +++ pom.xml 17 Mar 2005 23:59:06 -0000 1.4 @@ -1,4 +1,4 @@ -<model> +<project> <parent> <artifactId>maven-plugin-parent</artifactId> <groupId>maven</groupId> @@ -15,15 +15,16 @@ <groupId>maven</groupId> <artifactId>maven-core</artifactId> <version>2.0-SNAPSHOT</version> - <type>jar</type> - <scope>compile</scope> </dependency> <dependency> <groupId>maven</groupId> <artifactId>maven-model</artifactId> <version>2.0-SNAPSHOT</version> - <type>jar</type> - <scope>compile</scope> + </dependency> + <dependency> + <groupId>plexus</groupId> + <artifactId>plexus-archiver</artifactId> + <version>1.0-alpha-1-SNAPSHOT</version> </dependency> </dependencies> <build> @@ -49,4 +50,4 @@ </plugin> </plugins> </build> -</model> +</project> 1.71 +44 -44 maven-components/maven-mboot2/src/main/java/MBoot.java Index: MBoot.java =================================================================== RCS file: /home/cvs/maven-components/maven-mboot2/src/main/java/MBoot.java,v retrieving revision 1.70 retrieving revision 1.71 diff -u -r1.70 -r1.71 --- MBoot.java 17 Mar 2005 20:20:49 -0000 1.70 +++ MBoot.java 17 Mar 2005 23:59:07 -0000 1.71 @@ -65,28 +65,25 @@ // ---------------------------------------------------------------------- String[] modelloDeps = new String[]{"classworlds/jars/classworlds-1.1-alpha-1.jar", - //"plexus/jars/plexus-container-api-1.0-alpha-1-SNAPSHOT.jar", "plexus/jars/plexus-container-default-1.0-alpha-2-SNAPSHOT.jar", - //"plexus/jars/plexus-utils-1.0-alpha-1-SNAPSHOT.jar", "modello/jars/modello-core-1.0-SNAPSHOT.jar", "modello/jars/modello-xdoc-plugin-1.0-SNAPSHOT.jar", "modello/jars/modello-xml-plugin-1.0-SNAPSHOT.jar", "modello/jars/modello-xpp3-plugin-1.0-SNAPSHOT.jar"}; - String[] builds = new String[]{"maven-model", "maven-settings", "maven-monitor", "maven-plugin", - "maven-artifact", "maven-script/maven-script-marmalade", "maven-core", - "maven-archiver", "maven-plugin-tools/maven-plugin-tools-api", + String[] builds = new String[]{"maven-model", "maven-settings", "maven-monitor", "maven-plugin", "maven-artifact", + "maven-script/maven-script-marmalade", "maven-core", "maven-archiver", + "maven-plugin-tools/maven-plugin-tools-api", "maven-plugin-tools/maven-plugin-tools-java", "maven-plugin-tools/maven-plugin-tools-pluggy", - "maven-plugin-tools/maven-plugin-tools-marmalade", - "maven-core-it-verifier"}; + "maven-plugin-tools/maven-plugin-tools-marmalade", "maven-core-it-verifier"}; - String[] pluginBuilds = new String[]{"maven-plugins/maven-clean-plugin", "maven-plugins/maven-compiler-plugin", - "maven-plugins/maven-deploy-plugin", "maven-plugins/maven-ejb-plugin", - "maven-plugins/maven-install-plugin", "maven-plugins/maven-jar-plugin", - "maven-plugins/maven-plugin-plugin", "maven-plugins/maven-pom-plugin", - "maven-plugins/maven-resources-plugin", "maven-plugins/maven-surefire-plugin", - "maven-plugins/maven-war-plugin"}; + String[] pluginBuilds = new String[]{"maven-plugins/maven-assemble-plugin", "maven-plugins/maven-clean-plugin", + "maven-plugins/maven-compiler-plugin", "maven-plugins/maven-deploy-plugin", + "maven-plugins/maven-ejb-plugin", "maven-plugins/maven-install-plugin", + "maven-plugins/maven-jar-plugin", "maven-plugins/maven-plugin-plugin", + "maven-plugins/maven-pom-plugin", "maven-plugins/maven-resources-plugin", + "maven-plugins/maven-surefire-plugin", "maven-plugins/maven-war-plugin"}; private static final Map MODELLO_TARGET_VERSIONS; @@ -97,12 +94,14 @@ Map targetVersions = new TreeMap(); targetVersions.put( "maven-model", "4.0.0" ); targetVersions.put( "maven-settings", "1.0.0" ); + targetVersions.put( "maven-plugins/maven-assemble-plugin", "1.0.0" ); MODELLO_TARGET_VERSIONS = Collections.unmodifiableMap( targetVersions ); Map modelFiles = new TreeMap(); modelFiles.put( "maven-model", "maven.mdo" ); modelFiles.put( "maven-settings", "settings.mdo" ); + modelFiles.put( "maven-plugins/maven-assemble-plugin", "src/main/mdo/descriptor.mdo" ); MODELLO_MODEL_FILES = Collections.unmodifiableMap( modelFiles ); } @@ -222,13 +221,18 @@ mavenRepoLocal = repoDir.getAbsolutePath(); - System.out.println( "You SHOULD have a ~/.m2/settings.xml file and must contain at least the following information:\n" ); + System.out.println( + "You SHOULD have a ~/.m2/settings.xml file and must contain at least the following information:" ); + System.out.println(); - System.out.println( "<settings>\n" + " <profiles>\n" + " <profile>\n" - + " <active>true</active>\n" - + " <localRepository>/path/to/your/repository</localRepository>\n" - + " </profile>\n" + " </profiles>\n" - + "</settings>\n" ); + System.out.println( "<settings>" ); + System.out.println( " <profiles>" ); + System.out.println( " <profile>" ); + System.out.println( " <active>true</active>" ); + System.out.println( " <localRepository>/path/to/your/repository</localRepository>" ); + System.out.println( " </profile>" ); + System.out.println( " </profiles>" ); + System.out.println( "</settings>" ); System.out.println(); @@ -236,8 +240,8 @@ System.out.println(); - System.out.println( "HOWEVER, since you did not specify a repository path, maven will use: " - + repoDir.getAbsolutePath() + " to store artifacts locally." ); + System.out.println( "HOWEVER, since you did not specify a repository path, maven will use: " + + repoDir.getAbsolutePath() + " to store artifacts locally." ); } String mavenHome = null; @@ -680,10 +684,9 @@ File f = new File( repoLocal, dependency ); if ( !f.exists() ) { - throw new FileNotFoundException( "Missing dependency: " + dependency + - ( !online - ? "; run again online" - : "; there was a problem downloading it earlier" ) ); + throw new FileNotFoundException( + "Missing dependency: " + dependency + + ( !online ? "; run again online" : "; there was a problem downloading it earlier" ) ); } cl.addURL( f.toURL() ); @@ -700,10 +703,9 @@ File f = new File( repoLocal, dependency ); if ( !f.exists() ) { - throw new FileNotFoundException( "Missing dependency: " + dependency + - ( !online - ? "; run again online" - : "; there was a problem downloading it earlier" ) ); + throw new FileNotFoundException( + "Missing dependency: " + dependency + + ( !online ? "; run again online" : "; there was a problem downloading it earlier" ) ); } cl.addURL( f.toURL() ); @@ -735,10 +737,9 @@ File f = new File( repoLocal, dependency ); if ( !f.exists() ) { - throw new FileNotFoundException( "Missing dependency: " + dependency + - ( !online - ? "; run again online" - : "; there was a problem downloading it earlier" ) ); + throw new FileNotFoundException( + "Missing dependency: " + dependency + + ( !online ? "; run again online" : "; there was a problem downloading it earlier" ) ); } modelloClassLoader.addURL( f.toURL() ); @@ -878,9 +879,9 @@ excludes = new ArrayList(); excludes.add( "**/*Abstract*.java" ); - - String reportsDir = new File(basedir, "target/test-reports").getAbsolutePath(); - + + String reportsDir = new File( basedir, "target/test-reports" ).getAbsolutePath(); + boolean success = testRunner.execute( repoLocal, basedir, classes, testClasses, includes, excludes, classpath( reader.getDependencies(), null ), reportsDir ); @@ -1387,7 +1388,7 @@ { if ( "active".equals( rawName ) ) { - currentProfile.setActive( Boolean.valueOf(currentBody.toString().trim()).booleanValue() ); + currentProfile.setActive( Boolean.valueOf( currentBody.toString().trim() ).booleanValue() ); } else if ( "localRepository".equals( rawName ) ) { @@ -1407,15 +1408,14 @@ } else { - throw new SAXException( "Invalid proxy entry. Missing one or more " + - "fields: {host, port}." ); + throw new SAXException( "Invalid proxy entry. Missing one or more " + "fields: {host, port}." ); } } else if ( currentProxy != null ) { if ( "active".equals( rawName ) ) { - currentProxy.setActive( Boolean.valueOf(currentBody.toString().trim()).booleanValue() ); + currentProxy.setActive( Boolean.valueOf( currentBody.toString().trim() ).booleanValue() ); } else if ( "host".equals( rawName ) ) { @@ -1446,16 +1446,16 @@ } else if ( "settings".equals( rawName ) ) { - if( profiles.size() == 1 ) + if ( profiles.size() == 1 ) { - activeProfile = (Profile) profiles.get(0); + activeProfile = (Profile) profiles.get( 0 ); } else { for ( Iterator it = profiles.iterator(); it.hasNext(); ) { Profile profile = (Profile) it.next(); - if( profile.isActive() ) + if ( profile.isActive() ) { activeProfile = profile; } @@ -1466,7 +1466,7 @@ for ( Iterator it = proxies.iterator(); it.hasNext(); ) { Proxy proxy = (Proxy) it.next(); - if( proxy.isActive() ) + if ( proxy.isActive() ) { activeProxy = proxy; }