【问题标题】:How to pass Properties to jar from Powershell?如何将属性从 Powershell 传递给 jar?
【发布时间】:2010-12-03 20:56:08
【问题描述】:

我一直在使用 Powershell-1.0 来满足命令行需求,而不是 cmd.exe。不幸的是,在使用 Java 时仍有一些注意事项。我需要将一个属性传递给一个罐子,就像这样:

java -jar -Duser.language=en any.jar

这一行在 cmd.exe 中运行良好,但在 Powershell 中却不行,因为它会搜索另一个 jar:

无法访问 jarfile user.language=zh

使用引号没有帮助。

它在 Powershell-1.0 中可行,还是我错过了 Java 中的某些东西?

【问题讨论】:

  • 在 cmd.exe 中尝试一下很好,当我遇到以下命令时,我只是在其他地方“排除故障”我的问题,类路径不可用。谁会认为powershell是原因。 java -Djasypt.encryptor.password=pass -jar my.jar

标签: java powershell jar properties


【解决方案1】:

在 Windows 7 上的 PowerShell 中使用引号对我来说效果很好。

java "-Dmy.property=value" -jar myjar.jar

注意:jar 名称必须放在-jar 之后,而放在-jar myjar.jar 之后的参数将被传递给程序在 jarFile 中

【讨论】:

    【解决方案2】:

    看看我对此question 的回答。请注意如何使用 echoargs.exe 来诊断此类问题。最有可能的解决方法是引用参数,例如:

    java -jar "-Duser.language=en" any.jar
    

    您可以使用 echoargs(来自 PowerShell Community Extensions)进行测试:

    echoargs -jar "-Duser.language=en" any.jar
    Arg 0 is <-jar>
    Arg 1 is <-Duser.language=en>
    Arg 2 is <any.jar>
    

    【讨论】:

      【解决方案3】:

      尝试使用以下模式启动:

      java -Duser.language=en -jar any.jar
      

      假设 user.language 是系统属性。如果您将其作为命令行参数,请将其更改为:

      java -jar any.jar -Duser.language=en
      

      我真的很惊讶你提到的命令行在 powershell 之外都可以工作(尽管我已经确认它对我来说也可以正常工作,即使在 Linux 上也是如此),而且事情在内部和在 powershell 之外。

      来自java -help

      Usage: java [-options] class [args...]                 
                 (to execute a class)                        
         or  java [-options] -jar jarfile [args...]          
                 (to execute a jar file)                     
      where options include:
      ...
          -D<name>=<value>
                        set a system property
      ...
      

      所以基本上你应该始终将 JAR 文件名直接放在 -jar 命令行选项之后,以及任何 JVM 选项(例如使用 -D 设置系统属性)之前。

      【讨论】:

      • PowerShell 对传递给 java 的 -D-options 做了一些奇怪的事情,所以这不起作用。请参阅 Keith Hill 的回答。
      • @Johannes Powershell 对命令行的疯狂修改不谈,我的回答仍然成立,JAR 名称必须总是直接在命令行上的 -jar 之后(即不是原始问题中的情况)
      猜你喜欢
      • 2015-06-30
      • 1970-01-01
      • 1970-01-01
      • 2016-02-28
      • 2021-12-11
      • 1970-01-01
      • 2023-04-02
      • 1970-01-01
      相关资源
      最近更新 更多