powershell运行java进程问题
我正在尝试在Windows XP中通过Powershell运行java进程。命令如下:powershell运行java进程问题,java,command-line,powershell,Java,Command Line,Powershell,我正在尝试在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在
java.exe -cp .;./common.jar -Dcontext=atest1 -Dresourcepath=. DW_Install
因此,类路径是。和.\common.jar(我认为java使用了错误的斜杠,对吗?)有两个环境变量,一个是“atest1”,另一个是“.”,要在其上执行main的类是DW_Install(在默认包中)
这个命令在cmd.exe中工作,但不是PS。发生了什么?PS在解析这个命令时做了什么,CMD没有做(反之亦然)
Aaron从PowerShell运行外部命令行程序有时有点问题,因为PowerShell公开了两种不同的解析模式,这两种模式被所述外部程序的不同语法所压倒 在任何情况下,在Powershell中运行命令都需要使用
前缀()或&
运算符
您可以通过将每个参数作为单独的变量传递给外部程序来解决此问题,如下所示:
PS> $classpath = ".;./common.jar"
PS> $env = "-Dcontext=atest1 -Dresourcepath=."
PS> $class = "DW_Install"
PS> . java.exe -cp $classpath $env $class
以下方面应起作用:
java.exe -cp '.;./common.jar' -Dcontext=atest1 -Dresourcepath=. DW_Install
我猜PowerShell解释了
在类路径中,code>作为命令分隔符,因此尝试运行java-cp.
和/common.jar-D..
问题在于,由于某种原因,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
java
-cp
.;.\common.jar
-Dcontext=etaste1
-Dresourcepath=.
DW_Install
(注意resourcepath和resourcepath的值不在同一行。)而
echo java -cp '.;.\common.jar' -Dcontext=atest1 '-Dresourcepath=.' DW_Install
产生以下输出:
java
-cp
.;.\common.jar
-Dcontext=atest1
-Dresourcepath=
.
DW_Install
java
-cp
.;.\common.jar
-Dcontext=etaste1
-Dresourcepath=.
DW_Install
这更符合我们的喜好
尽管我不希望你们中的任何一个人受到这样的影响,但我希望这篇文章能够帮助你们中那些必须在Windows机器上部署java项目的人(即使他们永远不会在任何其他平台上运行)。另一个基于
当您说它在Powershell中不工作时,实际会发生什么?我得到java.exe帮助输出,就好像我刚刚键入了java
或java-help
。键入.java.exe-cp.。\common.jar-Dcontext=atest1-Dresourcepath=.DW\u Install
和.java.exe-cp\common.jar“-Dcontext=atest1-Dresourcepath=“.DW_Install
和.java.exe-cp.”.\common.jar“-Dcontext=atest1-Dresourcepath=”。“DW_Install
也不起作用。不过,我正在进入java.exe进程,因为使用第一个选项,我可以获得java使用情况输出。(a)只有当程序名会触发另一种解析模式时(例如7za.exe
),才需要使用
,但即使如此,您也应该使用&
而不是
,因为您不是点源外部程序。(b)$env
变量将无法按预期工作。尽管您的答案非常好,并且解决了许多问题,但1)它太过精确,2)它不完全准确。有关1)的证明,请参阅下面的答案。2),(假设我将$env
更改为$en
)我需要为每个-D
参数使用不同的PS变量,以使一切正常工作。这确实解决了我在下面提到的问题(对资源路径=。
的错误解析),但这对我的口味来说太麻烦了…再想一想,不必每次都输入这些环境变量可能会有帮助…再次感谢你的帖子,你得到了我的投票。不,不起作用,但是很好的尝试。我找到了答案,看下面。谢谢你提供的信息!这是一个有用的例子,我得到了我的投票。谢谢你最近的回复wer!我没有Microsoft Windows,也没有我试图运行的项目,因此我无法验证其有效性。