aboutsummaryrefslogtreecommitdiffstats
path: root/archiva-cli
diff options
context:
space:
mode:
authorJason van Zyl <jvanzyl@apache.org>2006-11-19 06:30:11 +0000
committerJason van Zyl <jvanzyl@apache.org>2006-11-19 06:30:11 +0000
commit360b2dfd8680a8e54d2763c0b15d0ec9b37770bc (patch)
tree667701203bbfaefae66814bc28b53d4dd5c992a5 /archiva-cli
parent16851b5a14b8ff9cf766a7cfab86c7df05a24bf6 (diff)
downloadarchiva-360b2dfd8680a8e54d2763c0b15d0ec9b37770bc.tar.gz
archiva-360b2dfd8680a8e54d2763c0b15d0ec9b37770bc.zip
o use new plexus-cli piece
git-svn-id: https://svn.apache.org/repos/asf/maven/archiva/trunk@476729 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'archiva-cli')
-rw-r--r--archiva-cli/pom.xml38
-rw-r--r--archiva-cli/src/main/java/org/apache/maven/archiva/cli/AbstractCli.java446
-rw-r--r--archiva-cli/src/main/java/org/apache/maven/archiva/cli/ArchivaCli.java31
-rw-r--r--archiva-cli/src/main/java/org/apache/maven/archiva/cli/Cli.java23
4 files changed, 16 insertions, 522 deletions
diff --git a/archiva-cli/pom.xml b/archiva-cli/pom.xml
index e2dc6a2fe..f94d1d732 100644
--- a/archiva-cli/pom.xml
+++ b/archiva-cli/pom.xml
@@ -12,44 +12,10 @@
<url>http://maven.apache.org</url>
<dependencies>
<dependency>
- <groupId>classworlds</groupId>
- <artifactId>classworlds</artifactId>
- <version>1.1</version>
- </dependency>
- <dependency>
- <groupId>org.codehaus.plexus</groupId>
- <artifactId>plexus-container-default</artifactId>
- </dependency>
- <dependency>
<groupId>org.codehaus.plexus</groupId>
- <artifactId>plexus-utils</artifactId>
- <version>1.1</version>
- </dependency>
- <dependency>
- <groupId>org.apache.maven.archiva</groupId>
- <artifactId>archiva-core</artifactId>
+ <artifactId>plexus-cli</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
- <dependency>
- <groupId>commons-cli</groupId>
- <artifactId>commons-cli</artifactId>
- <version>1.0</version>
- <exclusions>
- <exclusion>
- <artifactId>commons-lang</artifactId>
- <groupId>commons-lang</groupId>
- </exclusion>
- <exclusion>
- <artifactId>commons-logging</artifactId>
- <groupId>commons-logging</groupId>
- </exclusion>
- </exclusions>
- </dependency>
- <dependency>
- <groupId>ognl</groupId>
- <artifactId>ognl</artifactId>
- <version>2.6.7</version>
- </dependency>
</dependencies>
<build>
<plugins>
@@ -59,7 +25,7 @@
<descriptor>src/main/assembly/archiva-cli-assembly.xml</descriptor>
<archive>
<manifest>
- <mainClass>org.apache.maven.archiva.cli.Cli</mainClass>
+ <mainClass>org.apache.maven.archiva.cli.ArchivaCli</mainClass>
</manifest>
</archive>
</configuration>
diff --git a/archiva-cli/src/main/java/org/apache/maven/archiva/cli/AbstractCli.java b/archiva-cli/src/main/java/org/apache/maven/archiva/cli/AbstractCli.java
deleted file mode 100644
index 7e7c40dba..000000000
--- a/archiva-cli/src/main/java/org/apache/maven/archiva/cli/AbstractCli.java
+++ /dev/null
@@ -1,446 +0,0 @@
-package org.apache.maven.archiva.cli;
-
-import org.apache.commons.cli.CommandLine;
-import org.apache.commons.cli.CommandLineParser;
-import org.apache.commons.cli.GnuParser;
-import org.apache.commons.cli.HelpFormatter;
-import org.apache.commons.cli.Options;
-import org.apache.commons.cli.ParseException;
-import org.codehaus.classworlds.ClassWorld;
-import org.codehaus.plexus.DefaultPlexusContainer;
-import org.codehaus.plexus.PlexusContainer;
-import org.codehaus.plexus.PlexusContainerException;
-import org.codehaus.plexus.component.repository.exception.ComponentLookupException;
-
-import javax.naming.OperationNotSupportedException;
-import java.io.IOException;
-import java.io.InputStream;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Properties;
-
-/**
- * @author jason van zyl
- * @version $Id$
- * @noinspection UseOfSystemOutOrSystemErr,ACCESS_STATIC_VIA_INSTANCE
- */
-public abstract class AbstractCli
- implements Cli
-{
- // ----------------------------------------------------------------------------
- // These are standard options that we would want to use for all our projects.
- // ----------------------------------------------------------------------------
-
- public static final char QUIET = 'q';
-
- public static final char DEBUG = 'X';
-
- public static final char ERRORS = 'e';
-
- public static final char HELP = 'h';
-
- public static final char VERSION = 'v';
-
- public static final char SET_SYSTEM_PROPERTY = 'D';
-
- // ----------------------------------------------------------------------------
- // Abstract methods
- // ----------------------------------------------------------------------------
-
- protected static Cli getCli()
- {
- throw new UnsupportedOperationException( "You must implement this getCli() in your subclass." );
- }
-
- protected abstract Options buildOptions( Options options );
-
- protected abstract void processOptions( CommandLine cli,
- PlexusContainer container )
- throws Exception;
-
- protected abstract String getPomPropertiesPath();
-
- // ----------------------------------------------------------------------------
- //
- // ----------------------------------------------------------------------------
-
- public static void main( String[] args )
- {
- ClassWorld classWorld = new ClassWorld( "plexus.core", Thread.currentThread().getContextClassLoader() );
-
- int result = main( args, classWorld );
-
- System.exit( result );
- }
-
- /**
- * @noinspection ConfusingMainMethod
- */
- public static int main( String[] args,
- ClassWorld classWorld )
- {
- return getCli().execute( args, classWorld );
- }
-
- public int execute( String[] args,
- ClassWorld classWorld )
- {
- CommandLine cli;
-
- try
- {
- cli = parse( args );
- }
- catch ( ParseException e )
- {
- System.err.println( "Unable to parse command line options: " + e.getMessage() );
-
- displayHelp();
-
- return 1;
- }
-
- if ( System.getProperty( "java.class.version", "44.0" ).compareTo( "48.0" ) < 0 )
- {
- System.err.println( "Sorry, but JDK 1.4 or above is required to execute Maven" );
-
- System.err.println(
- "You appear to be using Java version: " + System.getProperty( "java.version", "<unknown>" ) );
-
- return 1;
- }
-
- boolean debug = cli.hasOption( DEBUG );
-
- boolean quiet = !debug && cli.hasOption( QUIET );
-
- boolean showErrors = debug || cli.hasOption( ERRORS );
-
- if ( showErrors )
- {
- System.out.println( "+ Error stacktraces are turned on." );
- }
-
- // ----------------------------------------------------------------------------
- // Logging
- // ----------------------------------------------------------------------------
-
- int loggingLevel;
-
- if ( debug )
- {
- loggingLevel = 0;
- }
- else if ( quiet )
- {
- loggingLevel = 0;
- }
- else
- {
- loggingLevel = 0;
- }
-
- // ----------------------------------------------------------------------
- // Process particular command line options
- // ----------------------------------------------------------------------
-
- if ( cli.hasOption( HELP ) )
- {
- displayHelp();
-
- return 0;
- }
-
- if ( cli.hasOption( VERSION ) )
- {
- showVersion();
-
- return 0;
- }
- else if ( debug )
- {
- showVersion();
- }
-
- // ----------------------------------------------------------------------------
- // This is what we will generalize for the invocation of the command line.
- // ----------------------------------------------------------------------------
-
- try
- {
- PlexusContainer plexus = new DefaultPlexusContainer( "plexus.core", classWorld );
-
- processOptions( cli, plexus );
- }
- catch ( PlexusContainerException e )
- {
- showFatalError( "Cannot create Plexus container.", e, true );
- }
- catch ( ComponentLookupException e )
- {
- showError( "Cannot lookup application component.", e, true );
- }
- catch ( Exception e )
- {
- showError( "Problem executing command line.", e, true );
- }
-
- return 0;
- }
-
- protected int showFatalError( String message,
- Exception e,
- boolean show )
- {
- System.err.println( "FATAL ERROR: " + message );
-
- if ( show )
- {
- System.err.println( "Error stacktrace:" );
-
- e.printStackTrace();
- }
- else
- {
- System.err.println( "For more information, run with the -e flag" );
- }
-
- return 1;
- }
-
- protected void showError( String message,
- Exception e,
- boolean show )
- {
- System.err.println( message );
-
- if ( show )
- {
- System.err.println( "Error stacktrace:" );
-
- e.printStackTrace();
- }
- }
-
- // Need to get the versions of the application in a general way, so that I need a way to get the
- // specifics of the application so that I can do this in a general way.
- private void showVersion()
- {
- InputStream resourceAsStream;
- try
- {
- Properties properties = new Properties();
-
- resourceAsStream = AbstractCli.class.getClassLoader().getResourceAsStream( getPomPropertiesPath() );
-
- properties.load( resourceAsStream );
-
- if ( properties.getProperty( "builtOn" ) != null )
- {
- System.out.println( "Maven version: " + properties.getProperty( "version", "unknown" ) + " built on " +
- properties.getProperty( "builtOn" ) );
- }
- else
- {
- System.out.println( "Maven version: " + properties.getProperty( "version", "unknown" ) );
- }
- }
- catch ( IOException e )
- {
- System.err.println( "Unable determine version from JAR file: " + e.getMessage() );
- }
- }
-
- // ----------------------------------------------------------------------
- // System properties handling
- // ----------------------------------------------------------------------
-
- private Properties getExecutionProperties( CommandLine commandLine )
- {
- Properties executionProperties = new Properties();
-
- // ----------------------------------------------------------------------
- // Options that are set on the command line become system properties
- // and therefore are set in the session properties. System properties
- // are most dominant.
- // ----------------------------------------------------------------------
-
- if ( commandLine.hasOption( SET_SYSTEM_PROPERTY ) )
- {
- String[] defStrs = commandLine.getOptionValues( SET_SYSTEM_PROPERTY );
-
- for ( int i = 0; i < defStrs.length; ++i )
- {
- setCliProperty( defStrs[i], executionProperties );
- }
- }
-
- executionProperties.putAll( System.getProperties() );
-
- return executionProperties;
- }
-
- private void setCliProperty( String property,
- Properties executionProperties )
- {
- String name;
-
- String value;
-
- int i = property.indexOf( "=" );
-
- if ( i <= 0 )
- {
- name = property.trim();
-
- value = "true";
- }
- else
- {
- name = property.substring( 0, i ).trim();
-
- value = property.substring( i + 1 ).trim();
- }
-
- executionProperties.setProperty( name, value );
-
- // ----------------------------------------------------------------------
- // I'm leaving the setting of system properties here as not to break
- // the SystemPropertyProfileActivator. This won't harm embedding. jvz.
- // ----------------------------------------------------------------------
-
- System.setProperty( name, value );
- }
-
- private Options options;
-
- public Options buildOptions()
- {
- options = new Options();
-
- return buildOptions( options );
- }
-
- public CommandLine parse( String[] args )
- throws ParseException
- {
- // We need to eat any quotes surrounding arguments...
- String[] cleanArgs = cleanArgs( args );
-
- CommandLineParser parser = new GnuParser();
-
- return parser.parse( buildOptions(), cleanArgs );
- }
-
- private static String[] cleanArgs( String[] args )
- {
- List cleaned = new ArrayList();
-
- StringBuffer currentArg = null;
-
- for ( int i = 0; i < args.length; i++ )
- {
- String arg = args[i];
-
- boolean addedToBuffer = false;
-
- if ( arg.startsWith( "\"" ) )
- {
- // if we're in the process of building up another arg, push it and start over.
- // this is for the case: "-Dfoo=bar "-Dfoo2=bar two" (note the first unterminated quote)
- if ( currentArg != null )
- {
- cleaned.add( currentArg.toString() );
- }
-
- // start building an argument here.
- currentArg = new StringBuffer( arg.substring( 1 ) );
-
- addedToBuffer = true;
- }
-
- // this has to be a separate "if" statement, to capture the case of: "-Dfoo=bar"
- if ( arg.endsWith( "\"" ) )
- {
- String cleanArgPart = arg.substring( 0, arg.length() - 1 );
-
- // if we're building an argument, keep doing so.
- if ( currentArg != null )
- {
- // if this is the case of "-Dfoo=bar", then we need to adjust the buffer.
- if ( addedToBuffer )
- {
- currentArg.setLength( currentArg.length() - 1 );
- }
- // otherwise, we trim the trailing " and append to the buffer.
- else
- {
- // TODO: introducing a space here...not sure what else to do but collapse whitespace
- currentArg.append( ' ' ).append( cleanArgPart );
- }
-
- // we're done with this argument, so add it.
- cleaned.add( currentArg.toString() );
- }
- else
- {
- // this is a simple argument...just add it.
- cleaned.add( cleanArgPart );
- }
-
- // the currentArg MUST be finished when this completes.
- currentArg = null;
-
- continue;
- }
-
- // if we haven't added this arg to the buffer, and we ARE building an argument
- // buffer, then append it with a preceding space...again, not sure what else to
- // do other than collapse whitespace.
- // NOTE: The case of a trailing quote is handled by nullifying the arg buffer.
- if ( !addedToBuffer )
- {
- // append to the argument we're building, collapsing whitespace to a single space.
- if ( currentArg != null )
- {
- currentArg.append( ' ' ).append( arg );
- }
- // this is a loner, just add it directly.
- else
- {
- cleaned.add( arg );
- }
- }
- }
-
- // clean up.
- if ( currentArg != null )
- {
- cleaned.add( currentArg.toString() );
- }
-
- int cleanedSz = cleaned.size();
- String[] cleanArgs = null;
-
- if ( cleanedSz == 0 )
- {
- // if we didn't have any arguments to clean, simply pass the original array through
- cleanArgs = args;
- }
- else
- {
- cleanArgs = (String[]) cleaned.toArray( new String[cleanedSz] );
- }
-
- return cleanArgs;
- }
-
- public void displayHelp()
- {
- System.out.println();
-
- HelpFormatter formatter = new HelpFormatter();
-
- formatter.printHelp( "mvn [options] [<goal(s)>] [<phase(s)>]", "\nOptions:", options, "\n" );
- }
-}
diff --git a/archiva-cli/src/main/java/org/apache/maven/archiva/cli/ArchivaCli.java b/archiva-cli/src/main/java/org/apache/maven/archiva/cli/ArchivaCli.java
index 39c817719..5effc48f7 100644
--- a/archiva-cli/src/main/java/org/apache/maven/archiva/cli/ArchivaCli.java
+++ b/archiva-cli/src/main/java/org/apache/maven/archiva/cli/ArchivaCli.java
@@ -1,20 +1,22 @@
package org.apache.maven.archiva.cli;
-import org.codehaus.plexus.PlexusContainer;
-import org.codehaus.plexus.util.StringUtils;
-import org.apache.maven.archiva.Archiva;
-import org.apache.maven.archiva.discoverer.DiscovererException;
-import org.apache.maven.archiva.converter.RepositoryConversionException;
import org.apache.commons.cli.CommandLine;
import org.apache.commons.cli.OptionBuilder;
import org.apache.commons.cli.Options;
+import org.apache.maven.archiva.Archiva;
+import org.apache.maven.archiva.converter.RepositoryConversionException;
+import org.apache.maven.archiva.discoverer.DiscovererException;
+import org.codehaus.plexus.PlexusContainer;
+import org.codehaus.plexus.tools.cli.AbstractCli;
+import org.codehaus.plexus.tools.cli.Cli;
+import org.codehaus.plexus.util.StringUtils;
-import java.util.Properties;
-import java.util.List;
-import java.util.Arrays;
+import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
-import java.io.File;
+import java.util.Arrays;
+import java.util.List;
+import java.util.Properties;
/**
* @author Jason van Zyl
@@ -34,17 +36,12 @@ public class ArchivaCli
//
// ----------------------------------------------------------------------------
- protected static Cli getCli()
- {
- return new ArchivaCli();
- }
-
- protected String getPomPropertiesPath()
+ public String getPomPropertiesPath()
{
return "META-INF/maven/org.apache.maven/maven-core/pom.properties";
}
- protected Options buildOptions( Options options )
+ public Options buildCliOptions( Options options )
{
options.addOption( OptionBuilder.withLongOpt( "convert" ).hasArg().withDescription(
"Convert a legacy Maven 1.x repository to a Maven 2.x repository using a properties file to describe the conversion." )
@@ -53,7 +50,7 @@ public class ArchivaCli
return options;
}
- public void processOptions( CommandLine cli,
+ public void invokePlexusComponent( CommandLine cli,
PlexusContainer plexus )
throws Exception
{
diff --git a/archiva-cli/src/main/java/org/apache/maven/archiva/cli/Cli.java b/archiva-cli/src/main/java/org/apache/maven/archiva/cli/Cli.java
deleted file mode 100644
index 6125455e0..000000000
--- a/archiva-cli/src/main/java/org/apache/maven/archiva/cli/Cli.java
+++ /dev/null
@@ -1,23 +0,0 @@
-package org.apache.maven.archiva.cli;
-
-import org.codehaus.classworlds.ClassWorld;
-import org.codehaus.plexus.PlexusContainer;
-import org.apache.commons.cli.Options;
-import org.apache.commons.cli.CommandLine;
-
-/**
- * @author Jason van Zyl
- */
-public interface Cli
-{
- int execute( String[] args,
- ClassWorld classWorld );
-
- Options buildOptions( Options options );
-
- void processOptions( CommandLine cli,
- PlexusContainer container )
- throws Exception;
-
- String getPomPropertiesPath();
-}