You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@commons.apache.org by "Steve Ogden (JIRA)" <ji...@apache.org> on 2008/05/29 19:45:45 UTC

[jira] Issue Comment Edited: (CLI-137) Change of behaviour 1.0 -> 1.1

    [ https://issues.apache.org/jira/browse/CLI-137?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12600852#action_12600852 ] 

scogden edited comment on CLI-137 at 5/29/08 10:45 AM:
-----------------------------------------------------------

Source code:
{code}
import org.apache.commons.cli.*;
import java.util.*;

public class TestBed
{
   private String[] args_;

   private TestBed( String[] args ) throws Exception
   {
      args_ = args;
   }

   private void cliTest() throws Exception
   {
      Options options = new Options();
      Option option = null;

      option = new Option( "a", "alpha", true, "comment" );
      option.setRequired( true );
      option.setArgs( Option.UNLIMITED_VALUES );
      options.addOption( option );

      CommandLineParser parser = new GnuParser();
      CommandLine commandLine = parser.parse( options, args_ );
      
      for ( Iterator iter = commandLine.iterator(); iter.hasNext(); )
      {
         Option opt = (Option)iter.next();
         char id = (char)opt.getId();
         String[] values = opt.getValues();
         System.out.println( "values for " + opt );

         for ( int ii = 0; ii < values.length; ii++ )
         {
            System.out.print( values[ ii ] );

            if ( ii < ( values.length - 1 ) )
            {
               System.out.print( ", " );
            }
         }
         System.out.println();
      }
   }


   public static void main( String[] args ) throws Throwable
   {
      TestBed testBed = new TestBed( args );

      testBed.cliTest();
   }
}
{code}
Running with ant:
{code}
   <target name="run" depends="jar">
      <java classname="${main.class}"
            fork="true">
         <jvmarg value="-showversion"/>
         <arg value="-a 1"/>
         <arg value="-a 2"/>
         <arg value="-a 3"/>
         <arg value="-a 4"/>
         <arg value="-b x"/>
         <arg value="output/output.bin"/>
         <classpath>
            <pathelement location="${classes.dir}"/>
            <fileset dir="${cots.dir}">
               <include name="*.jar"/>
            </fileset>
         </classpath>
      </java>
   </target>
{code}
Produces this output:
{code}
===============================================================================
1.0:
===============================================================================
run:
     [java] java version "1.5.0_15"
     [java] Java(TM) 2 Runtime Environment, Standard Edition (build 1.5.0_15-b04)
     [java] Java HotSpot(TM) Server VM (build 1.5.0_15-b04, mixed mode)

     [java] values for [ option: a alpha  :: comment ]
     [java]  1
     [java] values for [ option: a alpha  :: comment ]
     [java]  4, -b x, output/output.bin
     [java] values for [ option: a alpha  :: comment ]
     [java]  3
     [java] values for [ option: a alpha  :: comment ]
     [java]  2

===============================================================================
1.1
===============================================================================
run:
     [java] java version "1.5.0_15"
     [java] Java(TM) 2 Runtime Environment, Standard Edition (build 1.5.0_15-b04)
     [java] Java HotSpot(TM) Server VM (build 1.5.0_15-b04, mixed mode)

     [java] values for [ option: a alpha +ARG :: comment ]
     [java]  1,  2,  3,  4, -b x, output/output.bin
{code}
So it seems we can't have multiple instances of equivalent options when iterating.  The opt values get grouped into a single option instance.

      was (Author: scogden):
    Source code:
{code}
import org.apache.commons.cli.*;
import java.util.*;

public class TestBed
{
   private String[] args_;

   private TestBed( String[] args ) throws Exception
   {
      args_ = args;
   }

   private void cliTest() throws Exception
   {
      Options options = new Options();
      Option option = null;

      option = new Option( "a", "alpha", true, "comment" );
      option.setRequired( true );
      option.setArgs( Option.UNLIMITED_VALUES );
      options.addOption( option );

      CommandLineParser parser = new GnuParser();
      CommandLine commandLine = parser.parse( options, args_ );
      
      for ( Iterator iter = commandLine.iterator(); iter.hasNext(); )
      {
         Option opt = (Option)iter.next();
         char id = (char)opt.getId();
         String[] values = opt.getValues();
         System.out.println( "values for " + opt );

         for ( int ii = 0; ii < values.length; ii++ )
         {
            System.out.print( values[ ii ] );

            if ( ii < ( values.length - 1 ) )
            {
               System.out.print( ", " );
            }
         }
         System.out.println();
      }
   }


   public static void main( String[] args ) throws Throwable
   {
      TestBed testBed = new TestBed( args );

      testBed.cliTest();
   }
}
{code}
Running with ant:
{code}
   <target name="run" depends="jar">
      <java jar="${jar.file}"
            output="${log.file}"
            fork="true"-->
      <java classname="${main.class}"
            fork="true">
         <jvmarg value="-showversion"/>
         <arg value="-a 1"/>
         <arg value="-a 2"/>
         <arg value="-a 3"/>
         <arg value="-a 4"/>
         <arg value="-b x"/>
         <arg value="output/output.bin"/>
         <classpath>
            <pathelement location="${classes.dir}"/>
            <fileset dir="${cots.dir}">
               <include name="*.jar"/>
            </fileset>
         </classpath>
      </java>
   </target>
{code}
Produces this output:
{code}
===============================================================================
1.0:
===============================================================================
run:
     [java] java version "1.5.0_15"
     [java] Java(TM) 2 Runtime Environment, Standard Edition (build 1.5.0_15-b04)
     [java] Java HotSpot(TM) Server VM (build 1.5.0_15-b04, mixed mode)

     [java] values for [ option: a alpha  :: comment ]
     [java]  1
     [java] values for [ option: a alpha  :: comment ]
     [java]  4, -b x, output/output.bin
     [java] values for [ option: a alpha  :: comment ]
     [java]  3
     [java] values for [ option: a alpha  :: comment ]
     [java]  2

===============================================================================
1.1
===============================================================================
run:
     [java] java version "1.5.0_15"
     [java] Java(TM) 2 Runtime Environment, Standard Edition (build 1.5.0_15-b04)
     [java] Java HotSpot(TM) Server VM (build 1.5.0_15-b04, mixed mode)

     [java] values for [ option: a alpha +ARG :: comment ]
     [java]  1,  2,  3,  4, -b x, output/output.bin
{code}
So it seems we can't have multiple instances of equivalent options when iterating.  The opt values get grouped into a single option instance.
  
> Change of behaviour 1.0 -> 1.1
> ------------------------------
>
>                 Key: CLI-137
>                 URL: https://issues.apache.org/jira/browse/CLI-137
>             Project: Commons CLI
>          Issue Type: Bug
>          Components: CLI-1.x
>    Affects Versions: 1.1
>         Environment: Ubuntu 7.04 Feisty Fawn (JDK 1.6.0) + Commons CLI 1.0 and 1.1
>            Reporter: Russel Winder
>            Priority: Blocker
>             Fix For: 1.2
>
>
> The code:
> {code}
> import org.apache.commons.cli.*;
> public class Trial {
>   private void execute (String[] commandLine) throws ParseException {
>     Options options = new Options();
>     options.addOption ( OptionBuilder.withLongOpt("flob").hasArg().create('F') );
>     CommandLine line = new GnuParser().parse(options, commandLine);
>     String[] results = line.getOptionValues('F');
>     if ( results != null ) { 
>       for ( String s : results ) { 
>         System.out.println( "-F " + s );
>       } 
>     }
>     results = line.getOptionValues("flob") ;
>     if ( results != null ) { 
>       for ( String s : results ) { 
>         System.out.println( "--blah " + s ); 
>       }
>     }
>     String[] theRest = line.getArgs() ;
>     for ( String s : theRest ) { 
>       System.out.print( s + " " ); 
>     }
>     System.out.println();
>   }
>   public static void main (String[] args) throws ParseException {
>     Trial trial = new Trial() ;
>     trial.execute ( new String[] { "-F1" , "-F3" , "-Fbla" , "-F 76" , "--flob" , "54" } ) ;
>   }
> }
> {code}
> when compiled and executed under 1.0 produces:
> trial:
>      [java] -F 1
>      [java] -F 3
>      [java] -F bla
>      [java] -F  76
>      [java] -F 54
>      [java] 
> However, when compiled and executed under 1.1 produces:
> trial:
>      [java] -F 1
>      [java] --blah 1
>      [java] 3 bla  76 54 

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.