dion 2003/08/18 21:22:38 Modified: src/java/org/apache/maven/cli App.java CLIManager.java Log: Switch stable branch back to HEAD Revision Changes Path 1.32 +122 -41 maven/src/java/org/apache/maven/cli/App.java Index: App.java =================================================================== RCS file: /home/cvs/maven/src/java/org/apache/maven/cli/App.java,v retrieving revision 1.31 retrieving revision 1.32 diff -u -r1.31 -r1.32 --- App.java 2 Aug 2003 22:26:20 -0000 1.31 +++ App.java 19 Aug 2003 04:22:38 -0000 1.32 @@ -61,16 +61,21 @@ import org.apache.commons.cli.CommandLine; import org.apache.commons.cli.ParseException; import org.apache.commons.jelly.JellyException; -import org.apache.maven.MavenConstants; -import org.apache.maven.Maven; +import org.apache.commons.jelly.XMLOutput; +import org.apache.maven.MavenUtils; +import org.apache.maven.MavenSession; import org.apache.maven.NoGoalException; -import org.apache.maven.UnknownGoalException; -import org.apache.maven.verifier.ChecksumVerificationException; import org.apache.maven.verifier.RepoConfigException; import org.apache.maven.verifier.UnsatisfiedDependencyException; +import org.apache.maven.verifier.ChecksumVerificationException; +import org.apache.maven.UnknownGoalException; +import org.apache.maven.jelly.MavenJellyContext; import java.io.File; import java.io.IOException; +import java.io.OutputStreamWriter; +import java.io.PrintStream; +import java.io.Writer; import java.net.MalformedURLException; import java.text.BreakIterator; import java.util.ArrayList; @@ -93,14 +98,10 @@ * * @todo Separate the computation of the available goals from the display * of the goals. The goal computation logic needs to be moved - * out of this class and be placed in Maven.java proper. + * out of this class and be placed in MavenSession.java proper. * @todo All logging needs to be done via commons-logging. No * System.out.* and Jelly needs to be taught to take a - * logger. In an attempt to isolate everything in Maven.java. - * @todo All references to any classes that are internal to Maven need to - * be removed from this class. Anything to do with Jelly or Werkz - * or Maven internals can't be present here as this should simply - * be a harness for running the Maven facade. + * logger. In an attempt to isolate everything in MavenSession.java. */ public class App { @@ -161,6 +162,9 @@ /** Display help option. */ private static final String DISPLAY_HELP = "h"; + /** Display info option. */ + private static final String DISPLAY_INFO = "i"; + /** Display version option. */ private static final String DISPLAY_VERSION = "v"; @@ -179,6 +183,9 @@ /** Debug option. */ private static final String DEBUG = "X"; + /** Working dir option. */ + private static final String WORKING_DIR = "d"; + // ------------------------------------------------------------ // C L A S S M E M B E R S // ------------------------------------------------------------ @@ -190,8 +197,19 @@ /** CLI Parser */ private CommandLine commandLine; - /** Facade for all Maven activity. */ - private Maven maven; + /** Saved original console System.out. */ + private PrintStream consoleOut; + + /** Saved original console System.err. */ + private PrintStream consoleErr; + + /** Jelly's underlying writer. */ + private Writer writer; + + /** MavenSession Jelly rootContext. */ + private MavenJellyContext rootContext; + + private MavenSession mavenSession; /** Constructor. */ public App() @@ -203,6 +221,26 @@ // ---------------------------------------------------------------------- /** + * Set Jelly rootContext. + * + * @param rootContext The mavenSession jelly rootContext. + */ + public void setRootContext( MavenJellyContext rootContext ) + { + this.rootContext = rootContext; + } + + /** + * Retrieve the Jelly rootContext. + * + * @return The Jelly rootContext. + */ + public MavenJellyContext getRootContext() + { + return rootContext; + } + + /** * Set the cli parser. * * @param commandLine The command line parser. @@ -244,6 +282,7 @@ setCli( CLIManager.parse( args ) ); initializeSystemProperties(); + initializeRootContext(); initializeMavenSession(); } @@ -287,51 +326,85 @@ } /** - * Initialize the maven bean. + * Initialize the IO streams. + * + * @throws IOException on error creating XML output and handling System.err + * and out */ - private void initializeMavenSession() - throws Exception + protected void initializeRootContext() + throws IOException { - maven = new Maven(); - } + this.consoleOut = System.out; + this.consoleErr = System.err; - /** - * Setup any system properties that have been specified on - * the CLI. - */ - public void initializeSystemProperties() - { - // Options that are set on the command line become system properties - // and therefore are set in the session properties. System properties - // are most dominant. + this.writer = new OutputStreamWriter( this.consoleOut ); + XMLOutput output = XMLOutput.createXMLOutput( writer, false ); + if ( getCli().hasOption( WORKING_DIR ) ) + { + String workingDir = getCli().getOptionValue(WORKING_DIR); + System.setProperty("user.dir", workingDir); + } + + // We will assume here that there might not be a project.xml file present + // and we will create the root context from the directory gleaned from + // the user.dir system property. + MavenJellyContext c = MavenUtils.createContext( new File( System.getProperty("user.dir") ) ); + setRootContext( c ); + if ( getCli().hasOption( DEBUG ) ) { - System.setProperty( MavenConstants.DEBUG_ON, "true" ); + getRootContext().setXMLOutput( output ); + getRootContext().setDebugOn( Boolean.TRUE ); } else { - System.setProperty( MavenConstants.DEBUG_ON, "false" ); + getRootContext().setXMLOutput( output ); + getRootContext().setDebugOn( Boolean.FALSE ); } if ( getCli().hasOption( EMACS_OUTPUT ) ) { - System.setProperty( MavenConstants.EMACS_MODE_ON, "true" ); + getRootContext().setEmacsModeOn( Boolean.TRUE ); } else { - System.setProperty( MavenConstants.EMACS_MODE_ON, "false" ); + getRootContext().setEmacsModeOn( Boolean.FALSE ); } if ( getCli().hasOption( WORK_OFFLINE ) ) { - System.setProperty( MavenConstants.ONLINE, "false" ); + getRootContext().setOnline( Boolean.FALSE ); } else { - System.setProperty( MavenConstants.ONLINE, "true" ); + getRootContext().setOnline( Boolean.TRUE ); } + } + /** + * Initialize the mavenSession bean. + */ + private void initializeMavenSession() + { + // Even though the rootProject contains the rootContext we set both in + // the even that there is no rootProject and the user is requesting goals + // to be attained that do not directly relate to a project. A goaly that + // may, say, generate the skeletal maven application build. + + mavenSession = new MavenSession(); + mavenSession.setRootContext( getRootContext() ); + // note: setRootDescriptor file is a static method + MavenSession.setRootDescriptorFile( getDescriptorFile() ); + mavenSession.addGoalNames( getCli().getArgList() ); + } + + /** + * Setup any system properties that have been specified on + * the CLI. + */ + public void initializeSystemProperties() + { if ( getCli().hasOption( SET_SYSTEM_PROPERTY ) ) { String[] defStrs = getCli().getOptionValues( SET_SYSTEM_PROPERTY ); @@ -372,7 +445,7 @@ * Perform main operations in a non-static method. * * @param args Arguments passed in from main(). - * @param fullStart Date the maven process was started. + * @param fullStart Date the mavenSession process was started. */ public void doMain( String[] args, Date fullStart ) { @@ -418,6 +491,14 @@ return; } + if ( getCli().hasOption( DISPLAY_INFO ) ) + { + CLIManager.displayInfo(); + System.out.println( "" ); + exit( returnCode ); + return; + } + if ( getCli().hasOption( DISPLAY_VERSION ) ) { printConsoleMavenHeader(); @@ -439,6 +520,8 @@ try { + mavenSession.initialize(); + if ( getCli().hasOption( DISPLAY_GOALS ) ) { displayGoals(); @@ -448,7 +531,7 @@ } else { - maven.attainGoals( getDescriptorFile() , getCli().getArgList()); + mavenSession.attainGoals(); } } catch ( UnsatisfiedDependencyException e ) @@ -515,8 +598,6 @@ System.err.println( "Column.... " + column ); System.err.println( msg ); - // FIXME: Make sure it gets dumped out while we're fixing stuff - e.printStackTrace(); } catch ( Exception e ) { @@ -674,7 +755,7 @@ System.out.println( " __ __" ); System.out.println( "| \\/ |__ _Apache__ ___" ); System.out.println( "| |\\/| / _` \\ V / -_) ' \\ ~ intelligent projects ~" ); - System.out.println( "|_| |_\\__,_|\\_/\\___|_||_| v. " + org.apache.maven.Maven.APP_VERSION ); + System.out.println( "|_| |_\\__,_|\\_/\\___|_||_| v. " + org.apache.maven.MavenSession.APP_VERSION ); } /** @@ -701,7 +782,7 @@ System.out.println( format( "", title.length(), '`' ) ); - Set goals = maven.getAllGoalNames(); + Set goals = mavenSession.getAllGoalNames(); List list = new ArrayList( goals ); @@ -727,7 +808,7 @@ for ( Iterator i = list.iterator(); i.hasNext(); ) { String goalName = (String) i.next(); // goal name - String goalDescription = maven.getGoalDescription( goalName ); + String goalDescription = mavenSession.getGoalDescription( goalName ); StringTokenizer st = new StringTokenizer( goalName, ":" ); String pluginName = st.nextToken(); //ex. java @@ -862,7 +943,7 @@ { String goalName = (String) i.next(); - String goalDescription = maven.getGoalDescription( goalName ); + String goalDescription = mavenSession.getGoalDescription( goalName ); boolean hasDesc = false; 1.12 +11 -0 maven/src/java/org/apache/maven/cli/CLIManager.java Index: CLIManager.java =================================================================== RCS file: /home/cvs/maven/src/java/org/apache/maven/cli/CLIManager.java,v retrieving revision 1.11 retrieving revision 1.12 diff -u -r1.11 -r1.12 --- CLIManager.java 28 Jul 2003 03:55:10 -0000 1.11 +++ CLIManager.java 19 Aug 2003 04:22:38 -0000 1.12 @@ -63,6 +63,7 @@ import org.apache.commons.cli.OptionBuilder; import org.apache.commons.cli.Options; import org.apache.commons.cli.ParseException; +import org.apache.env.Which; /** Utility for managing and parsing MavenSession's command-line. * @@ -205,5 +206,15 @@ options, "\n" ); + } + + /** Display system information. This is generally useful, maybe + * this could be made part of CLI? But it definitely shouldn't + * be stuck in MavenSession. + */ + public static void displayInfo() + { + Which env = new Which(); + env.doMain( new String[]{} ); } }
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]