Browse Source

Don't use ExecTask directly, instead use the ant adaptor objects and Execute2

git-svn-id: https://svn.apache.org/repos/asf/ant/core/trunk@270708 13f79535-47bb-0310-9956-ffa450edef68
master
Peter Donald 24 years ago
parent
commit
30655bbece
6 changed files with 316 additions and 334 deletions
  1. +65
    -108
      proposal/myrmidon/src/main/org/apache/tools/ant/taskdefs/optional/Cab.java
  2. +51
    -33
      proposal/myrmidon/src/main/org/apache/tools/ant/taskdefs/security/GenerateKey.java
  3. +42
    -26
      proposal/myrmidon/src/main/org/apache/tools/ant/taskdefs/security/SignJar.java
  4. +65
    -108
      proposal/myrmidon/src/todo/org/apache/tools/ant/taskdefs/optional/Cab.java
  5. +51
    -33
      proposal/myrmidon/src/todo/org/apache/tools/ant/taskdefs/security/GenerateKey.java
  6. +42
    -26
      proposal/myrmidon/src/todo/org/apache/tools/ant/taskdefs/security/SignJar.java

+ 65
- 108
proposal/myrmidon/src/main/org/apache/tools/ant/taskdefs/optional/Cab.java View File

@@ -14,41 +14,36 @@ import java.io.OutputStream;
import java.io.PrintWriter; import java.io.PrintWriter;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Iterator; import java.util.Iterator;
import org.apache.myrmidon.api.TaskException;
import org.apache.aut.nativelib.Os; import org.apache.aut.nativelib.Os;
import org.apache.tools.ant.DirectoryScanner;
import org.apache.myrmidon.api.TaskException;
import org.apache.tools.ant.types.DirectoryScanner;
import org.apache.tools.ant.taskdefs.MatchingTask; import org.apache.tools.ant.taskdefs.MatchingTask;
import org.apache.tools.ant.taskdefs.exec.ExecTask;
import org.apache.tools.ant.taskdefs.exec.Execute2;
import org.apache.tools.ant.types.Commandline;
import org.apache.tools.ant.types.FileSet; import org.apache.tools.ant.types.FileSet;


/** /**
* Create a CAB archive. * Create a CAB archive.
* *
* @author Roger Vaughn <a href="mailto:rvaughn@seaconinc.com">
* rvaughn@seaconinc.com</a>
* @author <a href="mailto:rvaughn@seaconinc.com">Roger Vaughn</a>
*/ */
public class Cab extends MatchingTask
public class Cab
extends MatchingTask
{ {
private ArrayList filesets = new ArrayList();
private boolean doCompress = true;
private boolean doVerbose = false;

protected String archiveType = "cab";

private File baseDir;

private File cabFile;
private String cmdOptions;
private ArrayList m_filesets = new ArrayList();
private boolean m_compress = true;
private File m_baseDir;
private File m_cabFile;
private String m_options;


/** /**
* This is the base directory to look in for things to cab. * This is the base directory to look in for things to cab.
* *
* @param baseDir The new Basedir value * @param baseDir The new Basedir value
*/ */
public void setBasedir( File baseDir )
public void setBasedir( final File baseDir )
{ {
this.baseDir = baseDir;
m_baseDir = baseDir;
} }


/** /**
@@ -56,9 +51,9 @@ public class Cab extends MatchingTask
* *
* @param cabFile The new Cabfile value * @param cabFile The new Cabfile value
*/ */
public void setCabfile( File cabFile )
public void setCabfile( final File cabFile )
{ {
this.cabFile = cabFile;
m_cabFile = cabFile;
} }


/** /**
@@ -66,9 +61,9 @@ public class Cab extends MatchingTask
* *
* @param compress The new Compress value * @param compress The new Compress value
*/ */
public void setCompress( boolean compress )
public void setCompress( final boolean compress )
{ {
doCompress = compress;
m_compress = compress;
} }


/** /**
@@ -76,19 +71,9 @@ public class Cab extends MatchingTask
* *
* @param options The new Options value * @param options The new Options value
*/ */
public void setOptions( String options )
{
cmdOptions = options;
}

/**
* Sets whether we want to see or suppress cabarc output.
*
* @param verbose The new Verbose value
*/
public void setVerbose( boolean verbose )
public void setOptions( final String options )
{ {
doVerbose = verbose;
m_options = options;
} }


/** /**
@@ -96,38 +81,38 @@ public class Cab extends MatchingTask
* *
* @param set The feature to be added to the Fileset attribute * @param set The feature to be added to the Fileset attribute
*/ */
public void addFileset( FileSet set )
public void addFileset( final FileSet set )
{ {
filesets.add( set );
m_filesets.add( set );
} }


public void execute() public void execute()
throws TaskException throws TaskException
{ {

checkConfiguration(); checkConfiguration();


ArrayList files = getFileList();
final ArrayList files = getFileList();


// quick exit if the target is up to date // quick exit if the target is up to date
if( isUpToDate( files ) ) if( isUpToDate( files ) )
{
return; return;
}


getLogger().info( "Building " + archiveType + ": " + cabFile.getAbsolutePath() );
getLogger().info( "Building cab: " + m_cabFile.getAbsolutePath() );


if( !Os.isFamily( "windows" ) ) if( !Os.isFamily( "windows" ) )
{ {
getLogger().debug( "Using listcab/libcabinet" ); getLogger().debug( "Using listcab/libcabinet" );


StringBuffer sb = new StringBuffer();

Iterator fileEnum = files.iterator();
final StringBuffer sb = new StringBuffer();


while( fileEnum.hasNext() )
final Iterator e = files.iterator();
while( e.hasNext() )
{ {
sb.append( fileEnum.next() ).append( "\n" );
sb.append( e.next() ).append( "\n" );
} }
sb.append( "\n" ).append( cabFile.getAbsolutePath() ).append( "\n" );
sb.append( "\n" ).append( m_cabFile.getAbsolutePath() ).append( "\n" );


try try
{ {
@@ -139,7 +124,7 @@ public class Cab extends MatchingTask
} }
catch( IOException ex ) catch( IOException ex )
{ {
String msg = "Problem creating " + cabFile + " " + ex.getMessage();
String msg = "Problem creating " + m_cabFile + " " + ex.getMessage();
throw new TaskException( msg ); throw new TaskException( msg );
} }
} }
@@ -148,32 +133,20 @@ public class Cab extends MatchingTask
try try
{ {
File listFile = createListFile( files ); File listFile = createListFile( files );
ExecTask exec = createExec();
File outFile = null;

// die if cabarc fails
exec.setDir( baseDir );

if( !doVerbose )
{
outFile = File.createTempFile( "ant", "", getBaseDirectory() );
exec.setOutput( outFile );
}

setupCommand( listFile, exec );
exec.execute();

if( outFile != null )
{
outFile.delete();
}
Execute2 exe = new Execute2();
setupLogger( exe );
exe.setWorkingDirectory( m_baseDir );
final Commandline cmd = createCommand( listFile );
exe.setCommandline( cmd.getCommandline() );
exe.execute();


listFile.delete(); listFile.delete();
} }
catch( IOException ioe )
catch( final IOException ioe )
{ {
String msg = "Problem creating " + cabFile + " " + ioe.getMessage();
throw new TaskException( msg );
final String message =
"Problem creating " + m_cabFile + " " + ioe.getMessage();
throw new TaskException( message );
} }
} }
} }
@@ -182,26 +155,23 @@ public class Cab extends MatchingTask
* Get the complete list of files to be included in the cab. Filenames are * Get the complete list of files to be included in the cab. Filenames are
* gathered from filesets if any have been added, otherwise from the * gathered from filesets if any have been added, otherwise from the
* traditional include parameters. * traditional include parameters.
*
* @return The FileList value
* @exception TaskException Description of Exception
*/ */
protected ArrayList getFileList() protected ArrayList getFileList()
throws TaskException throws TaskException
{ {
ArrayList files = new ArrayList(); ArrayList files = new ArrayList();


if( filesets.size() == 0 )
if( m_filesets.size() == 0 )
{ {
// get files from old methods - includes and nested include // get files from old methods - includes and nested include
appendFiles( files, super.getDirectoryScanner( baseDir ) );
appendFiles( files, super.getDirectoryScanner( m_baseDir ) );
} }
else else
{ {
// get files from filesets // get files from filesets
for( int i = 0; i < filesets.size(); i++ )
for( int i = 0; i < m_filesets.size(); i++ )
{ {
FileSet fs = (FileSet)filesets.get( i );
FileSet fs = (FileSet)m_filesets.get( i );
if( fs != null ) if( fs != null )
{ {
appendFiles( files, fs.getDirectoryScanner() ); appendFiles( files, fs.getDirectoryScanner() );
@@ -224,8 +194,8 @@ public class Cab extends MatchingTask
for( int i = 0; i < files.size() && upToDate; i++ ) for( int i = 0; i < files.size() && upToDate; i++ )
{ {
String file = files.get( i ).toString(); String file = files.get( i ).toString();
if( new File( baseDir, file ).lastModified() >
cabFile.lastModified() )
if( new File( m_baseDir, file ).lastModified() >
m_cabFile.lastModified() )
upToDate = false; upToDate = false;
} }
return upToDate; return upToDate;
@@ -255,15 +225,15 @@ public class Cab extends MatchingTask
protected void checkConfiguration() protected void checkConfiguration()
throws TaskException throws TaskException
{ {
if( baseDir == null )
if( m_baseDir == null )
{ {
throw new TaskException( "basedir attribute must be set!" ); throw new TaskException( "basedir attribute must be set!" );
} }
if( !baseDir.exists() )
if( !m_baseDir.exists() )
{ {
throw new TaskException( "basedir does not exist!" ); throw new TaskException( "basedir does not exist!" );
} }
if( cabFile == null )
if( m_cabFile == null )
{ {
throw new TaskException( "cabfile attribute must be set!" ); throw new TaskException( "cabfile attribute must be set!" );
} }
@@ -271,44 +241,31 @@ public class Cab extends MatchingTask


/** /**
* Create the cabarc command line to use. * Create the cabarc command line to use.
*
* @param listFile Description of Parameter
* @return Description of the Returned Value
*/ */
protected void setupCommand( File listFile, ExecTask exec )
protected Commandline createCommand( final File listFile )
throws TaskException throws TaskException
{ {
exec.setExecutable( "cabarc" );
exec.createArg().setValue( "-r" );
exec.createArg().setValue( "-p" );
final Commandline cmd = new Commandline();
cmd.setExecutable( "cabarc" );
cmd.createArgument().setValue( "-r" );
cmd.createArgument().setValue( "-p" );


if( !doCompress )
if( !m_compress )
{ {
exec.createArg().setValue( "-m" );
exec.createArg().setValue( "none" );
cmd.createArgument().setValue( "-m" );
cmd.createArgument().setValue( "none" );
} }


if( cmdOptions != null )
if( m_options != null )
{ {
exec.createArg().setLine( cmdOptions );
cmd.createArgument().setLine( m_options );
} }


exec.createArg().setValue( "n" );
exec.createArg().setFile( cabFile );
exec.createArg().setValue( "@" + listFile.getAbsolutePath() );
}
cmd.createArgument().setValue( "n" );
cmd.createArgument().setFile( m_cabFile );
cmd.createArgument().setValue( "@" + listFile.getAbsolutePath() );


/**
* Create a new exec delegate. The delegate task is populated so that it
* appears in the logs to be the same task as this one.
*
* @return Description of the Returned Value
* @exception TaskException Description of Exception
*/
protected ExecTask createExec()
throws TaskException
{
return (ExecTask)getProject().createTask( "exec" );
return cmd;
} }


/** /**


+ 51
- 33
proposal/myrmidon/src/main/org/apache/tools/ant/taskdefs/security/GenerateKey.java View File

@@ -7,17 +7,19 @@
*/ */
package org.apache.tools.ant.taskdefs.security; package org.apache.tools.ant.taskdefs.security;


import org.apache.myrmidon.api.AbstractTask;
import org.apache.myrmidon.api.TaskException; import org.apache.myrmidon.api.TaskException;
import org.apache.tools.ant.Task;
import org.apache.tools.ant.taskdefs.exec.ExecTask;
import org.apache.tools.ant.taskdefs.exec.Execute2;
import org.apache.tools.ant.types.Commandline;
import java.io.IOException;


/** /**
* Generates a key. * Generates a key.
* *
* @author <a href="mailto:donaldp@apache.org">Peter Donald</a>
* @author <a href="mailto:peter@apache.org">Peter Donald</a>
*/ */
public class GenerateKey public class GenerateKey
extends Task
extends AbstractTask
{ {
/** /**
* The alias of signer. * The alias of signer.
@@ -141,87 +143,103 @@ public class GenerateKey
final String message = "Generating Key for " + m_alias; final String message = "Generating Key for " + m_alias;
getLogger().info( message ); getLogger().info( message );


final ExecTask cmd = (ExecTask)getProject().createTask( "exec" );
final Commandline cmd = createCommand();
final Execute2 exe = new Execute2();
exe.setWorkingDirectory( getBaseDirectory() );
exe.setCommandline( cmd.getCommandline() );
try
{
exe.execute();
}
catch( final IOException ioe )
{
throw new TaskException( ioe.getMessage(), ioe );
}
}

private Commandline createCommand()
{
final Commandline cmd = new Commandline();
cmd.setExecutable( "keytool" ); cmd.setExecutable( "keytool" );


cmd.createArg().setValue( "-genkey " );
cmd.createArgument().setValue( "-genkey " );


if( m_verbose ) if( m_verbose )
{ {
cmd.createArg().setValue( "-v " );
cmd.createArgument().setValue( "-v " );
} }


cmd.createArg().setValue( "-alias" );
cmd.createArg().setValue( m_alias );
cmd.createArgument().setValue( "-alias" );
cmd.createArgument().setValue( m_alias );


if( null != m_dname ) if( null != m_dname )
{ {
cmd.createArg().setValue( "-dname" );
cmd.createArg().setValue( m_dname );
cmd.createArgument().setValue( "-dname" );
cmd.createArgument().setValue( m_dname );
} }


if( null != m_expandedDname ) if( null != m_expandedDname )
{ {
cmd.createArg().setValue( "-dname" );
cmd.createArg().setValue( m_expandedDname.toString() );
cmd.createArgument().setValue( "-dname" );
cmd.createArgument().setValue( m_expandedDname.toString() );
} }


if( null != m_keystore ) if( null != m_keystore )
{ {
cmd.createArg().setValue( "-keystore" );
cmd.createArg().setValue( m_keystore );
cmd.createArgument().setValue( "-keystore" );
cmd.createArgument().setValue( m_keystore );
} }


if( null != m_storepass ) if( null != m_storepass )
{ {
cmd.createArg().setValue( "-storepass" );
cmd.createArg().setValue( m_storepass );
cmd.createArgument().setValue( "-storepass" );
cmd.createArgument().setValue( m_storepass );
} }


if( null != m_storetype ) if( null != m_storetype )
{ {
cmd.createArg().setValue( "-storetype" );
cmd.createArg().setValue( m_storetype );
cmd.createArgument().setValue( "-storetype" );
cmd.createArgument().setValue( m_storetype );
} }


cmd.createArg().setValue( "-keypass" );
cmd.createArgument().setValue( "-keypass" );
if( null != m_keypass ) if( null != m_keypass )
{ {
cmd.createArg().setValue( m_keypass );
cmd.createArgument().setValue( m_keypass );
} }
else else
{ {
cmd.createArg().setValue( m_storepass );
cmd.createArgument().setValue( m_storepass );
} }


if( null != m_sigalg ) if( null != m_sigalg )
{ {
cmd.createArg().setValue( "-sigalg" );
cmd.createArg().setValue( m_sigalg );
cmd.createArgument().setValue( "-sigalg" );
cmd.createArgument().setValue( m_sigalg );
} }


if( null != m_keyalg ) if( null != m_keyalg )
{ {
cmd.createArg().setValue( "-keyalg" );
cmd.createArg().setValue( m_keyalg );
cmd.createArgument().setValue( "-keyalg" );
cmd.createArgument().setValue( m_keyalg );
} }


if( 0 < m_keysize ) if( 0 < m_keysize )
{ {
cmd.createArg().setValue( "-keysize" );
cmd.createArg().setValue( "" + m_keysize );
cmd.createArgument().setValue( "-keysize" );
cmd.createArgument().setValue( "" + m_keysize );
} }


if( 0 < m_validity ) if( 0 < m_validity )
{ {
cmd.createArg().setValue( "-validity" );
cmd.createArg().setValue( "" + m_validity );
cmd.createArgument().setValue( "-validity" );
cmd.createArgument().setValue( "" + m_validity );
} }

cmd.execute();
return cmd;
} }


private void validate() throws TaskException
private void validate()
throws TaskException
{ {
if( null == m_alias ) if( null == m_alias )
{ {


+ 42
- 26
proposal/myrmidon/src/main/org/apache/tools/ant/taskdefs/security/SignJar.java View File

@@ -15,15 +15,16 @@ import java.util.zip.ZipEntry;
import java.util.zip.ZipFile; import java.util.zip.ZipFile;
import org.apache.myrmidon.api.AbstractTask; import org.apache.myrmidon.api.AbstractTask;
import org.apache.myrmidon.api.TaskException; import org.apache.myrmidon.api.TaskException;
import org.apache.tools.ant.DirectoryScanner;
import org.apache.tools.ant.taskdefs.exec.ExecTask;
import org.apache.tools.ant.types.DirectoryScanner;
import org.apache.tools.ant.taskdefs.exec.Execute2;
import org.apache.tools.ant.types.Commandline;
import org.apache.tools.ant.types.FileSet; import org.apache.tools.ant.types.FileSet;


/** /**
* Sign a archive. * Sign a archive.
* *
* @author Peter Donald <a href="mailto:donaldp@apache.org">donaldp@apache.org</a>
* @author Nick Fortescue <a href="mailto:nick@ox.compsoc.net">nick@ox.compsoc.net</a>
* @author <a href="mailto:peter@apache.org">Peter Donald</a>
* @author <a href="mailto:nick@ox.compsoc.net">Nick Fortescue</a>
*/ */
public class SignJar public class SignJar
extends AbstractTask extends AbstractTask
@@ -285,67 +286,82 @@ public class SignJar


final StringBuffer sb = new StringBuffer(); final StringBuffer sb = new StringBuffer();


final ExecTask cmd = null;//(ExecTask)getProject().createTask( "exec" );
final String message = "Signing Jar : " + jarSource.getAbsolutePath();
getLogger().info( message );

final Commandline cmd = buildCommand( jarTarget, jarSource );
final Execute2 exe = new Execute2();
setupLogger( exe );
try
{
exe.execute();
}
catch( final IOException ioe )
{
throw new TaskException( ioe.getMessage(), ioe );
}
}

private Commandline buildCommand( final File jarTarget, final File jarSource )
{
final Commandline cmd = new Commandline();
cmd.setExecutable( "jarsigner" ); cmd.setExecutable( "jarsigner" );


if( null != m_keystore ) if( null != m_keystore )
{ {
cmd.createArg().setValue( "-keystore" );
cmd.createArg().setValue( m_keystore.toString() );
cmd.createArgument().setValue( "-keystore" );
cmd.createArgument().setValue( m_keystore.toString() );
} }


if( null != m_storepass ) if( null != m_storepass )
{ {
cmd.createArg().setValue( "-storepass" );
cmd.createArg().setValue( m_storepass );
cmd.createArgument().setValue( "-storepass" );
cmd.createArgument().setValue( m_storepass );
} }


if( null != m_storetype ) if( null != m_storetype )
{ {
cmd.createArg().setValue( "-storetype" );
cmd.createArg().setValue( m_storetype );
cmd.createArgument().setValue( "-storetype" );
cmd.createArgument().setValue( m_storetype );
} }


if( null != m_keypass ) if( null != m_keypass )
{ {
cmd.createArg().setValue( "-keypass" );
cmd.createArg().setValue( m_keypass );
cmd.createArgument().setValue( "-keypass" );
cmd.createArgument().setValue( m_keypass );
} }


if( null != m_sigfile ) if( null != m_sigfile )
{ {
cmd.createArg().setValue( "-sigfile" );
cmd.createArg().setValue( m_sigfile.toString() );
cmd.createArgument().setValue( "-sigfile" );
cmd.createArgument().setValue( m_sigfile.toString() );
} }


if( null != jarTarget ) if( null != jarTarget )
{ {
cmd.createArg().setValue( "-signedjar" );
cmd.createArg().setValue( jarTarget.toString() );
cmd.createArgument().setValue( "-signedjar" );
cmd.createArgument().setValue( jarTarget.toString() );
} }


if( m_verbose ) if( m_verbose )
{ {
cmd.createArg().setValue( "-verbose" );
cmd.createArgument().setValue( "-verbose" );
} }


if( m_internalsf ) if( m_internalsf )
{ {
cmd.createArg().setValue( "-internalsf" );
cmd.createArgument().setValue( "-internalsf" );
} }


if( m_sectionsonly ) if( m_sectionsonly )
{ {
cmd.createArg().setValue( "-sectionsonly" );
cmd.createArgument().setValue( "-sectionsonly" );
} }


cmd.createArg().setValue( jarSource.toString() );
cmd.createArgument().setValue( jarSource.toString() );


cmd.createArg().setValue( m_alias );

final String message = "Signing Jar : " + jarSource.getAbsolutePath();
getLogger().info( message );
cmd.execute();
cmd.createArgument().setValue( m_alias );
return cmd;
} }
} }



+ 65
- 108
proposal/myrmidon/src/todo/org/apache/tools/ant/taskdefs/optional/Cab.java View File

@@ -14,41 +14,36 @@ import java.io.OutputStream;
import java.io.PrintWriter; import java.io.PrintWriter;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Iterator; import java.util.Iterator;
import org.apache.myrmidon.api.TaskException;
import org.apache.aut.nativelib.Os; import org.apache.aut.nativelib.Os;
import org.apache.tools.ant.DirectoryScanner;
import org.apache.myrmidon.api.TaskException;
import org.apache.tools.ant.types.DirectoryScanner;
import org.apache.tools.ant.taskdefs.MatchingTask; import org.apache.tools.ant.taskdefs.MatchingTask;
import org.apache.tools.ant.taskdefs.exec.ExecTask;
import org.apache.tools.ant.taskdefs.exec.Execute2;
import org.apache.tools.ant.types.Commandline;
import org.apache.tools.ant.types.FileSet; import org.apache.tools.ant.types.FileSet;


/** /**
* Create a CAB archive. * Create a CAB archive.
* *
* @author Roger Vaughn <a href="mailto:rvaughn@seaconinc.com">
* rvaughn@seaconinc.com</a>
* @author <a href="mailto:rvaughn@seaconinc.com">Roger Vaughn</a>
*/ */
public class Cab extends MatchingTask
public class Cab
extends MatchingTask
{ {
private ArrayList filesets = new ArrayList();
private boolean doCompress = true;
private boolean doVerbose = false;

protected String archiveType = "cab";

private File baseDir;

private File cabFile;
private String cmdOptions;
private ArrayList m_filesets = new ArrayList();
private boolean m_compress = true;
private File m_baseDir;
private File m_cabFile;
private String m_options;


/** /**
* This is the base directory to look in for things to cab. * This is the base directory to look in for things to cab.
* *
* @param baseDir The new Basedir value * @param baseDir The new Basedir value
*/ */
public void setBasedir( File baseDir )
public void setBasedir( final File baseDir )
{ {
this.baseDir = baseDir;
m_baseDir = baseDir;
} }


/** /**
@@ -56,9 +51,9 @@ public class Cab extends MatchingTask
* *
* @param cabFile The new Cabfile value * @param cabFile The new Cabfile value
*/ */
public void setCabfile( File cabFile )
public void setCabfile( final File cabFile )
{ {
this.cabFile = cabFile;
m_cabFile = cabFile;
} }


/** /**
@@ -66,9 +61,9 @@ public class Cab extends MatchingTask
* *
* @param compress The new Compress value * @param compress The new Compress value
*/ */
public void setCompress( boolean compress )
public void setCompress( final boolean compress )
{ {
doCompress = compress;
m_compress = compress;
} }


/** /**
@@ -76,19 +71,9 @@ public class Cab extends MatchingTask
* *
* @param options The new Options value * @param options The new Options value
*/ */
public void setOptions( String options )
{
cmdOptions = options;
}

/**
* Sets whether we want to see or suppress cabarc output.
*
* @param verbose The new Verbose value
*/
public void setVerbose( boolean verbose )
public void setOptions( final String options )
{ {
doVerbose = verbose;
m_options = options;
} }


/** /**
@@ -96,38 +81,38 @@ public class Cab extends MatchingTask
* *
* @param set The feature to be added to the Fileset attribute * @param set The feature to be added to the Fileset attribute
*/ */
public void addFileset( FileSet set )
public void addFileset( final FileSet set )
{ {
filesets.add( set );
m_filesets.add( set );
} }


public void execute() public void execute()
throws TaskException throws TaskException
{ {

checkConfiguration(); checkConfiguration();


ArrayList files = getFileList();
final ArrayList files = getFileList();


// quick exit if the target is up to date // quick exit if the target is up to date
if( isUpToDate( files ) ) if( isUpToDate( files ) )
{
return; return;
}


getLogger().info( "Building " + archiveType + ": " + cabFile.getAbsolutePath() );
getLogger().info( "Building cab: " + m_cabFile.getAbsolutePath() );


if( !Os.isFamily( "windows" ) ) if( !Os.isFamily( "windows" ) )
{ {
getLogger().debug( "Using listcab/libcabinet" ); getLogger().debug( "Using listcab/libcabinet" );


StringBuffer sb = new StringBuffer();

Iterator fileEnum = files.iterator();
final StringBuffer sb = new StringBuffer();


while( fileEnum.hasNext() )
final Iterator e = files.iterator();
while( e.hasNext() )
{ {
sb.append( fileEnum.next() ).append( "\n" );
sb.append( e.next() ).append( "\n" );
} }
sb.append( "\n" ).append( cabFile.getAbsolutePath() ).append( "\n" );
sb.append( "\n" ).append( m_cabFile.getAbsolutePath() ).append( "\n" );


try try
{ {
@@ -139,7 +124,7 @@ public class Cab extends MatchingTask
} }
catch( IOException ex ) catch( IOException ex )
{ {
String msg = "Problem creating " + cabFile + " " + ex.getMessage();
String msg = "Problem creating " + m_cabFile + " " + ex.getMessage();
throw new TaskException( msg ); throw new TaskException( msg );
} }
} }
@@ -148,32 +133,20 @@ public class Cab extends MatchingTask
try try
{ {
File listFile = createListFile( files ); File listFile = createListFile( files );
ExecTask exec = createExec();
File outFile = null;

// die if cabarc fails
exec.setDir( baseDir );

if( !doVerbose )
{
outFile = File.createTempFile( "ant", "", getBaseDirectory() );
exec.setOutput( outFile );
}

setupCommand( listFile, exec );
exec.execute();

if( outFile != null )
{
outFile.delete();
}
Execute2 exe = new Execute2();
setupLogger( exe );
exe.setWorkingDirectory( m_baseDir );
final Commandline cmd = createCommand( listFile );
exe.setCommandline( cmd.getCommandline() );
exe.execute();


listFile.delete(); listFile.delete();
} }
catch( IOException ioe )
catch( final IOException ioe )
{ {
String msg = "Problem creating " + cabFile + " " + ioe.getMessage();
throw new TaskException( msg );
final String message =
"Problem creating " + m_cabFile + " " + ioe.getMessage();
throw new TaskException( message );
} }
} }
} }
@@ -182,26 +155,23 @@ public class Cab extends MatchingTask
* Get the complete list of files to be included in the cab. Filenames are * Get the complete list of files to be included in the cab. Filenames are
* gathered from filesets if any have been added, otherwise from the * gathered from filesets if any have been added, otherwise from the
* traditional include parameters. * traditional include parameters.
*
* @return The FileList value
* @exception TaskException Description of Exception
*/ */
protected ArrayList getFileList() protected ArrayList getFileList()
throws TaskException throws TaskException
{ {
ArrayList files = new ArrayList(); ArrayList files = new ArrayList();


if( filesets.size() == 0 )
if( m_filesets.size() == 0 )
{ {
// get files from old methods - includes and nested include // get files from old methods - includes and nested include
appendFiles( files, super.getDirectoryScanner( baseDir ) );
appendFiles( files, super.getDirectoryScanner( m_baseDir ) );
} }
else else
{ {
// get files from filesets // get files from filesets
for( int i = 0; i < filesets.size(); i++ )
for( int i = 0; i < m_filesets.size(); i++ )
{ {
FileSet fs = (FileSet)filesets.get( i );
FileSet fs = (FileSet)m_filesets.get( i );
if( fs != null ) if( fs != null )
{ {
appendFiles( files, fs.getDirectoryScanner() ); appendFiles( files, fs.getDirectoryScanner() );
@@ -224,8 +194,8 @@ public class Cab extends MatchingTask
for( int i = 0; i < files.size() && upToDate; i++ ) for( int i = 0; i < files.size() && upToDate; i++ )
{ {
String file = files.get( i ).toString(); String file = files.get( i ).toString();
if( new File( baseDir, file ).lastModified() >
cabFile.lastModified() )
if( new File( m_baseDir, file ).lastModified() >
m_cabFile.lastModified() )
upToDate = false; upToDate = false;
} }
return upToDate; return upToDate;
@@ -255,15 +225,15 @@ public class Cab extends MatchingTask
protected void checkConfiguration() protected void checkConfiguration()
throws TaskException throws TaskException
{ {
if( baseDir == null )
if( m_baseDir == null )
{ {
throw new TaskException( "basedir attribute must be set!" ); throw new TaskException( "basedir attribute must be set!" );
} }
if( !baseDir.exists() )
if( !m_baseDir.exists() )
{ {
throw new TaskException( "basedir does not exist!" ); throw new TaskException( "basedir does not exist!" );
} }
if( cabFile == null )
if( m_cabFile == null )
{ {
throw new TaskException( "cabfile attribute must be set!" ); throw new TaskException( "cabfile attribute must be set!" );
} }
@@ -271,44 +241,31 @@ public class Cab extends MatchingTask


/** /**
* Create the cabarc command line to use. * Create the cabarc command line to use.
*
* @param listFile Description of Parameter
* @return Description of the Returned Value
*/ */
protected void setupCommand( File listFile, ExecTask exec )
protected Commandline createCommand( final File listFile )
throws TaskException throws TaskException
{ {
exec.setExecutable( "cabarc" );
exec.createArg().setValue( "-r" );
exec.createArg().setValue( "-p" );
final Commandline cmd = new Commandline();
cmd.setExecutable( "cabarc" );
cmd.createArgument().setValue( "-r" );
cmd.createArgument().setValue( "-p" );


if( !doCompress )
if( !m_compress )
{ {
exec.createArg().setValue( "-m" );
exec.createArg().setValue( "none" );
cmd.createArgument().setValue( "-m" );
cmd.createArgument().setValue( "none" );
} }


if( cmdOptions != null )
if( m_options != null )
{ {
exec.createArg().setLine( cmdOptions );
cmd.createArgument().setLine( m_options );
} }


exec.createArg().setValue( "n" );
exec.createArg().setFile( cabFile );
exec.createArg().setValue( "@" + listFile.getAbsolutePath() );
}
cmd.createArgument().setValue( "n" );
cmd.createArgument().setFile( m_cabFile );
cmd.createArgument().setValue( "@" + listFile.getAbsolutePath() );


/**
* Create a new exec delegate. The delegate task is populated so that it
* appears in the logs to be the same task as this one.
*
* @return Description of the Returned Value
* @exception TaskException Description of Exception
*/
protected ExecTask createExec()
throws TaskException
{
return (ExecTask)getProject().createTask( "exec" );
return cmd;
} }


/** /**


+ 51
- 33
proposal/myrmidon/src/todo/org/apache/tools/ant/taskdefs/security/GenerateKey.java View File

@@ -7,17 +7,19 @@
*/ */
package org.apache.tools.ant.taskdefs.security; package org.apache.tools.ant.taskdefs.security;


import org.apache.myrmidon.api.AbstractTask;
import org.apache.myrmidon.api.TaskException; import org.apache.myrmidon.api.TaskException;
import org.apache.tools.ant.Task;
import org.apache.tools.ant.taskdefs.exec.ExecTask;
import org.apache.tools.ant.taskdefs.exec.Execute2;
import org.apache.tools.ant.types.Commandline;
import java.io.IOException;


/** /**
* Generates a key. * Generates a key.
* *
* @author <a href="mailto:donaldp@apache.org">Peter Donald</a>
* @author <a href="mailto:peter@apache.org">Peter Donald</a>
*/ */
public class GenerateKey public class GenerateKey
extends Task
extends AbstractTask
{ {
/** /**
* The alias of signer. * The alias of signer.
@@ -141,87 +143,103 @@ public class GenerateKey
final String message = "Generating Key for " + m_alias; final String message = "Generating Key for " + m_alias;
getLogger().info( message ); getLogger().info( message );


final ExecTask cmd = (ExecTask)getProject().createTask( "exec" );
final Commandline cmd = createCommand();
final Execute2 exe = new Execute2();
exe.setWorkingDirectory( getBaseDirectory() );
exe.setCommandline( cmd.getCommandline() );
try
{
exe.execute();
}
catch( final IOException ioe )
{
throw new TaskException( ioe.getMessage(), ioe );
}
}

private Commandline createCommand()
{
final Commandline cmd = new Commandline();
cmd.setExecutable( "keytool" ); cmd.setExecutable( "keytool" );


cmd.createArg().setValue( "-genkey " );
cmd.createArgument().setValue( "-genkey " );


if( m_verbose ) if( m_verbose )
{ {
cmd.createArg().setValue( "-v " );
cmd.createArgument().setValue( "-v " );
} }


cmd.createArg().setValue( "-alias" );
cmd.createArg().setValue( m_alias );
cmd.createArgument().setValue( "-alias" );
cmd.createArgument().setValue( m_alias );


if( null != m_dname ) if( null != m_dname )
{ {
cmd.createArg().setValue( "-dname" );
cmd.createArg().setValue( m_dname );
cmd.createArgument().setValue( "-dname" );
cmd.createArgument().setValue( m_dname );
} }


if( null != m_expandedDname ) if( null != m_expandedDname )
{ {
cmd.createArg().setValue( "-dname" );
cmd.createArg().setValue( m_expandedDname.toString() );
cmd.createArgument().setValue( "-dname" );
cmd.createArgument().setValue( m_expandedDname.toString() );
} }


if( null != m_keystore ) if( null != m_keystore )
{ {
cmd.createArg().setValue( "-keystore" );
cmd.createArg().setValue( m_keystore );
cmd.createArgument().setValue( "-keystore" );
cmd.createArgument().setValue( m_keystore );
} }


if( null != m_storepass ) if( null != m_storepass )
{ {
cmd.createArg().setValue( "-storepass" );
cmd.createArg().setValue( m_storepass );
cmd.createArgument().setValue( "-storepass" );
cmd.createArgument().setValue( m_storepass );
} }


if( null != m_storetype ) if( null != m_storetype )
{ {
cmd.createArg().setValue( "-storetype" );
cmd.createArg().setValue( m_storetype );
cmd.createArgument().setValue( "-storetype" );
cmd.createArgument().setValue( m_storetype );
} }


cmd.createArg().setValue( "-keypass" );
cmd.createArgument().setValue( "-keypass" );
if( null != m_keypass ) if( null != m_keypass )
{ {
cmd.createArg().setValue( m_keypass );
cmd.createArgument().setValue( m_keypass );
} }
else else
{ {
cmd.createArg().setValue( m_storepass );
cmd.createArgument().setValue( m_storepass );
} }


if( null != m_sigalg ) if( null != m_sigalg )
{ {
cmd.createArg().setValue( "-sigalg" );
cmd.createArg().setValue( m_sigalg );
cmd.createArgument().setValue( "-sigalg" );
cmd.createArgument().setValue( m_sigalg );
} }


if( null != m_keyalg ) if( null != m_keyalg )
{ {
cmd.createArg().setValue( "-keyalg" );
cmd.createArg().setValue( m_keyalg );
cmd.createArgument().setValue( "-keyalg" );
cmd.createArgument().setValue( m_keyalg );
} }


if( 0 < m_keysize ) if( 0 < m_keysize )
{ {
cmd.createArg().setValue( "-keysize" );
cmd.createArg().setValue( "" + m_keysize );
cmd.createArgument().setValue( "-keysize" );
cmd.createArgument().setValue( "" + m_keysize );
} }


if( 0 < m_validity ) if( 0 < m_validity )
{ {
cmd.createArg().setValue( "-validity" );
cmd.createArg().setValue( "" + m_validity );
cmd.createArgument().setValue( "-validity" );
cmd.createArgument().setValue( "" + m_validity );
} }

cmd.execute();
return cmd;
} }


private void validate() throws TaskException
private void validate()
throws TaskException
{ {
if( null == m_alias ) if( null == m_alias )
{ {


+ 42
- 26
proposal/myrmidon/src/todo/org/apache/tools/ant/taskdefs/security/SignJar.java View File

@@ -15,15 +15,16 @@ import java.util.zip.ZipEntry;
import java.util.zip.ZipFile; import java.util.zip.ZipFile;
import org.apache.myrmidon.api.AbstractTask; import org.apache.myrmidon.api.AbstractTask;
import org.apache.myrmidon.api.TaskException; import org.apache.myrmidon.api.TaskException;
import org.apache.tools.ant.DirectoryScanner;
import org.apache.tools.ant.taskdefs.exec.ExecTask;
import org.apache.tools.ant.types.DirectoryScanner;
import org.apache.tools.ant.taskdefs.exec.Execute2;
import org.apache.tools.ant.types.Commandline;
import org.apache.tools.ant.types.FileSet; import org.apache.tools.ant.types.FileSet;


/** /**
* Sign a archive. * Sign a archive.
* *
* @author Peter Donald <a href="mailto:donaldp@apache.org">donaldp@apache.org</a>
* @author Nick Fortescue <a href="mailto:nick@ox.compsoc.net">nick@ox.compsoc.net</a>
* @author <a href="mailto:peter@apache.org">Peter Donald</a>
* @author <a href="mailto:nick@ox.compsoc.net">Nick Fortescue</a>
*/ */
public class SignJar public class SignJar
extends AbstractTask extends AbstractTask
@@ -285,67 +286,82 @@ public class SignJar


final StringBuffer sb = new StringBuffer(); final StringBuffer sb = new StringBuffer();


final ExecTask cmd = null;//(ExecTask)getProject().createTask( "exec" );
final String message = "Signing Jar : " + jarSource.getAbsolutePath();
getLogger().info( message );

final Commandline cmd = buildCommand( jarTarget, jarSource );
final Execute2 exe = new Execute2();
setupLogger( exe );
try
{
exe.execute();
}
catch( final IOException ioe )
{
throw new TaskException( ioe.getMessage(), ioe );
}
}

private Commandline buildCommand( final File jarTarget, final File jarSource )
{
final Commandline cmd = new Commandline();
cmd.setExecutable( "jarsigner" ); cmd.setExecutable( "jarsigner" );


if( null != m_keystore ) if( null != m_keystore )
{ {
cmd.createArg().setValue( "-keystore" );
cmd.createArg().setValue( m_keystore.toString() );
cmd.createArgument().setValue( "-keystore" );
cmd.createArgument().setValue( m_keystore.toString() );
} }


if( null != m_storepass ) if( null != m_storepass )
{ {
cmd.createArg().setValue( "-storepass" );
cmd.createArg().setValue( m_storepass );
cmd.createArgument().setValue( "-storepass" );
cmd.createArgument().setValue( m_storepass );
} }


if( null != m_storetype ) if( null != m_storetype )
{ {
cmd.createArg().setValue( "-storetype" );
cmd.createArg().setValue( m_storetype );
cmd.createArgument().setValue( "-storetype" );
cmd.createArgument().setValue( m_storetype );
} }


if( null != m_keypass ) if( null != m_keypass )
{ {
cmd.createArg().setValue( "-keypass" );
cmd.createArg().setValue( m_keypass );
cmd.createArgument().setValue( "-keypass" );
cmd.createArgument().setValue( m_keypass );
} }


if( null != m_sigfile ) if( null != m_sigfile )
{ {
cmd.createArg().setValue( "-sigfile" );
cmd.createArg().setValue( m_sigfile.toString() );
cmd.createArgument().setValue( "-sigfile" );
cmd.createArgument().setValue( m_sigfile.toString() );
} }


if( null != jarTarget ) if( null != jarTarget )
{ {
cmd.createArg().setValue( "-signedjar" );
cmd.createArg().setValue( jarTarget.toString() );
cmd.createArgument().setValue( "-signedjar" );
cmd.createArgument().setValue( jarTarget.toString() );
} }


if( m_verbose ) if( m_verbose )
{ {
cmd.createArg().setValue( "-verbose" );
cmd.createArgument().setValue( "-verbose" );
} }


if( m_internalsf ) if( m_internalsf )
{ {
cmd.createArg().setValue( "-internalsf" );
cmd.createArgument().setValue( "-internalsf" );
} }


if( m_sectionsonly ) if( m_sectionsonly )
{ {
cmd.createArg().setValue( "-sectionsonly" );
cmd.createArgument().setValue( "-sectionsonly" );
} }


cmd.createArg().setValue( jarSource.toString() );
cmd.createArgument().setValue( jarSource.toString() );


cmd.createArg().setValue( m_alias );

final String message = "Signing Jar : " + jarSource.getAbsolutePath();
getLogger().info( message );
cmd.execute();
cmd.createArgument().setValue( m_alias );
return cmd;
} }
} }



Loading…
Cancel
Save