为什么参数包含传递到java中主方法的野生路径可以更改



在此处和http://docs.oracle.com/javase/tutorial/search.html,但我找不到一个好的解决方案。

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

当传递的参数包含带有"*"的野生路径时,例如"*.java",它们将被扩展或更改。

javac -encoding utf-8 Compiling.java
F:AndroidworkspaceJavaTestcompiling>java -cp . Compiling *.java 22 *.class
args = [Compiling.java, Foo.java, 22, Compiling.class, Foo.class]

演示

    public class Compiling {
    /**
     * F:AndroidworkspaceJavaTestcompiling>java -cp . Compiling *.java 
     * args = [Compiling.java, Foo.java]
     * 
     * F:AndroidworkspaceJavaTestcompiling>java -cp . Compiling 22 *.java
     * args = [22, Compiling.java, Foo.java]
     * 
     * F:AndroidworkspaceJavaTestcompiling>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));
    }
}

故事如下。

@set DX_BAT=%ANDROID_SDK%build-toolsandroid-4.4Wdx.bat
cd /D %LocalProjectPath%
for /f "delims=" %%a in ('dir /b /ad %ModulesDirAtBinDir%') do (
call %DX_BAT% --dex --no-strict --verbose --output=assetsmodules%%a.jar %ModulesDirAtBinDir%%%a*.class
    )

当我调用dex.bat时,发现一个文件在dx 1.70版本中找不到表达式,但它在dx 1.80版本中有效。

java.lang.RuntimeException:bin\module_classes\com\android\module xx*.class:找不到文件

我以为问题出在文件"lib/dx.jar"上。不幸的是,在sdk\build-tools\18.1.1\lib目录中,它可以工作。

D:PROGRA~2JavaJDK18~1.0_2binjava.exe  -Xmx1024M -Xss1m -Djava.ext.dirs=lib -jar libdx.jar  --dex --no-strict --verbose --output F:AndroidworkspaceAndroidProjectassetsmodulesxx.jar F:AndroidworkspaceAndroidProjectbinmodule_classescomandroidmodule-xx*.class

事实上,在"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

当前目录已更改。此外,我并没有认真阅读例外情况。

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

试试下面的代码,你会发现操作系统已经做了一些事情。

#include<stdio.h>
int main(int argc, char** argv){
  while(--argc >= 0){
    printf("argv[%d] = %sn", argc, argv[argc]);
  }
  return 0;
}
  1. 另存为print_args.c
  2. 执行"gcc-o print_command_args.c"
  3. 在linux上执行"./print_command_arguments*",在windows上执行"print_commands_arguments*"

第二个参数"*"将被展开。

相关内容

  • 没有找到相关文章

最新更新