我正在尝试通过 Windows XP 中的 Powershell 运行 java 进程。这是命令:
java.exe -cp .;./common.jar -Dcontext=atest1 -Dresourcepath=. DW_Install
因此,类路径是 .和 .\common.jar(我认为 java 使用了错误的斜杠,对吧?)有两个环境变量,一个是“atest1”,另一个是“.”。执行 main 的类是 DW_Install(在默认包中)。
此命令在 cmd.exe 中有效,但在 PS 中无效。这是怎么回事? PS 在解析此 CMD 不执行的命令(反之亦然)时在做什么?
亚伦
最佳答案
问题是 PS 出于某种原因解析 -Dresourcepath=.
与 cmd 不同。有效的是
java -cp '.;.\common.jar' -Dcontext=atest1 "-Dresourcepath=." DW_Install
斜线的走向无关紧要,使用引号('
或 "
)也无关紧要。必须对类路径进行转义,但是,带有某种引号。查看 PS 解释器得到什么的一个很好的测试是回显它。以下内容:
echo java -cp '.;.\common.jar' -Dcontext=atest1 -Dresourcepath=. DW_Install
产生以下输出:
java
-cp
.;.\common.jar
-Dcontext=atest1
-Dresourcepath=
.
DW_Install
(注意资源路径和资源路径的值不在同一行。)而输出到
echo java -cp '.;.\common.jar' -Dcontext=atest1 '-Dresourcepath=.' DW_Install
产生以下输出:
java
-cp
.;.\common.jar
-Dcontext=etaste1
-Dresourcepath=.
DW_Install
这更符合我们的喜好。
虽然我不希望你们遇到这种情况,但我希望这篇文章能帮助那些必须在 Windows 机器上部署 java 项目的人(即使它们永远不会在任何其他平台上运行)。
关于java - powershell运行java进程问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4685184/