java中为什么参数包含传给main方法的野路径可以改
Why the parameters contains a wild path passed to the main method in java can be changed
在 "Search, and research" 这里和 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:\Android\workspace\JavaTest\compiling>java -cp . Compiling *.java 22 *.class
args = [Compiling.java, Foo.java, 22, Compiling.class, Foo.class]
演示
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));
}
}
故事如下
@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
)
当我调用dex.bat时,发现在dx 1.70版本中有一个filenotfound扩展,但它在dx 1.80版本中有效。
java.lang.RuntimeException: bin\module_classes\com\android\module-xx*.class: 找不到文件
我以为问题出在文件 "lib/dx.jar" 上。不幸的是,在目录 sdk\build-tools.1.1\lib 中,它有效。
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
事实上,在"F:\Android\sdk\build-tools.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
试试下面的代码,你会发现os做了一些事情。
#include<stdio.h>
int main(int argc, char** argv){
while(--argc >= 0){
printf("argv[%d] = %s\n", argc, argv[argc]);
}
return 0;
}
- 另存为print_args.c.
- 执行"gcc -o print_command_arguments print_args.c"
- 在 linux 上执行“./print_command_arguments *”或在 windows 上执行 "print_command_arguments *"。
第二个参数“*”将被展开。
在 "Search, and research" 这里和 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:\Android\workspace\JavaTest\compiling>java -cp . Compiling *.java 22 *.class
args = [Compiling.java, Foo.java, 22, Compiling.class, Foo.class]
演示
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));
}
}
故事如下
@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
)
当我调用dex.bat时,发现在dx 1.70版本中有一个filenotfound扩展,但它在dx 1.80版本中有效。
java.lang.RuntimeException: bin\module_classes\com\android\module-xx*.class: 找不到文件
我以为问题出在文件 "lib/dx.jar" 上。不幸的是,在目录 sdk\build-tools.1.1\lib 中,它有效。
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
事实上,在"F:\Android\sdk\build-tools.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
试试下面的代码,你会发现os做了一些事情。
#include<stdio.h>
int main(int argc, char** argv){
while(--argc >= 0){
printf("argv[%d] = %s\n", argc, argv[argc]);
}
return 0;
}
- 另存为print_args.c.
- 执行"gcc -o print_command_arguments print_args.c"
- 在 linux 上执行“./print_command_arguments *”或在 windows 上执行 "print_command_arguments *"。
第二个参数“*”将被展开。