Search code examples
javaprogram-entry-point

Why the parameters contains a wild path passed to the main method in java can be changed


After "Search, and research" here and http://docs.oracle.com/javase/tutorial/search.html, but I cannot find a nice solution.

http: //docs.oracle.com/javase/tutorial/getStarted/application/#MAIN

When the parameters passed contain a wild path with "*", such as "*.java", they will be extended or changed.

javac -encoding utf-8 Compiling.java
F:\Android\workspace\JavaTest\compiling>java -cp . Compiling *.java 22 *.class
args = [Compiling.java, Foo.java, 22, Compiling.class, Foo.class]

Demo

    public class Compiling {
    /**
     * F:\Android\workspace\JavaTest\compiling>java -cp . Compiling *.java 
     * args = [Compiling.java, Foo.java]
     * 
     * F:\Android\workspace\JavaTest\compiling>java -cp . Compiling 22 *.java
     * args = [22, Compiling.java, Foo.java]
     * 
     * F:\Android\workspace\JavaTest\compiling>java -cp . Compiling *.java 22
     * args = [Compiling.java, Foo.java, 22]
     * 
     * @param args
     */
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        System.out.println("args = " + Arrays.toString(args));
    }
}

The story is as follow.

@set DX_BAT=%ANDROID_SDK%\build-tools\android-4.4W\dx.bat
cd /D %LocalProjectPath%
for /f "delims=" %%a in ('dir /b /ad %ModulesDirAtBinDir%') do (
call %DX_BAT% --dex --no-strict --verbose --output=assets\modules\%%a.jar %ModulesDirAtBinDir%%%a\*.class
    )

When I call dex.bat, find that a filenotfound exption in dx version 1.70, but it works in dx version 1.80.

java.lang.RuntimeException: bin\module_classes\com\android\module-xx*.class: file not found

I thought the problem was the file "lib/dx.jar".Unfortunately, in the directory sdk\build-tools\18.1.1\lib, it works.

D:\PROGRA~2\Java\JDK18~1.0_2\bin\java.exe  -Xmx1024M -Xss1m -Djava.ext.dirs=lib\ -jar lib\dx.jar  --dex --no-strict --verbose --output F:\Android\workspace\AndroidProject\assets\modules\xx.jar F:\Android\workspace\AndroidProject\bin\module_classes\com\android\module-xx\*.class

In fact, in "F:\Android\sdk\build-tools\18.1.1\dx.bat":

REM Change current directory to where dx is, to avoid issues with directories
REM containing whitespaces.
cd /d %~dp0

The current directory is changed. Also I did not seriously read the exception.

1:https:// plus.google.com/u/0/102826186191478166401/posts/PuVvwkn3nTw?pid=6120466408040851106&oid=102826186191478166401

2:https://lh4.googleusercontent.com/-yL8SUUHDGaU/VPBDxT78ZqI/AAAAAAAAABk/zuqg8glIKLw/w1118-h170-no/dx.jar.png


Solution

  • Try the below code, you will find the os has done something .

    #include<stdio.h>
    
    int main(int argc, char** argv){
      while(--argc >= 0){
        printf("argv[%d] = %s\n", argc, argv[argc]);
      }
      return 0;
    }
    
    1. Save as print_args.c.
    2. Execute "gcc -o print_command_arguments print_args.c"
    3. Execute "./print_command_arguments *" on linux or "print_command_arguments *" on windows.

    The second argument "*" will be expanded.