【问题标题】:Passing java an argument while debugging in VS Code在 VS Code 中调试时传递 java 参数
【发布时间】:2020-01-08 03:07:26
【问题描述】:

在运行我的 Java 程序时,我需要将一个参数传递给 java 命令。这个参数是“-Dderby.system.home=D:\DataDir”,告诉Java Derby 数据库的位置。在 Eclipse 中,我可以简单地在运行配置中添加参数,但是如何在 VS Code 中执行此操作却让我望而却步。任何帮助将不胜感激。

【问题讨论】:

标签: java visual-studio-code


【解决方案1】:

对我来说,它是将 args 数组添加到配置中,如下所示。

这会传入“-G”作为参数。

{
  "type": "java",
  "name": "Launch CommandLineController",
  "request": "launch",            
  "args": 
  [
      "-G"
  ],            
  "mainClass": "com.eric.controller.CommandLineController",      
  "projectName": "quotes"
}

【讨论】:

    【解决方案2】:

    假设您已安装 Java Extension Pack

    一旦您尝试运行包含您的 main 的 java 文件,您应该会看到一个文件 launch.json 生成。如果您使用编辑器打开它,您将能够在运行configurations 中添加多个标志。

    您可以添加的标志之一是 vmArgs 和 vmArgs 根据他们的文档:

    vmArgs - JVM 的额外选项和系统属性(用于 例如 -Xms -Xmx -D=),它接受一个字符串 或字符串数​​组。

    更多信息:visualstudio docs

    【讨论】:

    • 对,在文档中找到了。但这是指要传递给程序的 main() 方法的参数,而不是 JRE。这个参数是为了告诉 Java 在哪里可以找到 Derby 数据库,所以实际将程序作为 jar 文件运行将是: java -Dderby.system.home=D:\DataDir -jar MyProgram.jar
    • vmArgs 是您正在寻找的那个,对吧?更新了我的答案。
    • 这确实是我需要的,但我想我没有使用正确的语法。我试过: "vmargs": "-Dderby.system.home=D:\\DataDir" 并且程序没有找到数据库。这就是从命令行运行程序所使用的语法......我想知道内部 VS Code 是否不仅仅是将该参数添加到“java”命令中。
    • "vmArgs": "-Dderby.system.home=D:\\DataDir" - 注意vmArgs上的驼峰式大小写
    • 嘘。我在设置中使用了骆驼皮套,它只是没有完成我的最后一条评论:-/ 很抱歉。完全按照我的 launch.json 文件中输入的行复制/粘贴是:“vmArgs”:“-Dderby.system.home=D:\\DataDir”。结果和原来一样,出现找不到数据库文件的异常。
    【解决方案3】:

    如果您直接在 launch.json 中传递 vmArgs,不确定此解决方案是否适用,但我在使用 settings.json 时遇到了麻烦

    当您在 VSCode 中转到 Settings > Launch 时,它会将您带到 settings.json,它会自动添加以下样板:

    "launch": {
        "configurations": [],
        "compounds": []
    }
    

    按照文档,我使用必要的 vmArgs 对其进行了修改以启动我的应用程序:

    "launch": {
        "configurations": [
            {
                "type": "java",
                "request": "launch",
                "vmArgs": "--foo arg1 --bar arg2",
                "mainClass": "baz.Klass",
                "projectName": "baz"
            }
        ],
        "compounds": []
    }
    

    我不知道的是,在尝试运行应用程序时,此配置会被复制到 launch.json。似乎 launch.json 是配置应用程序时实际使用的内容,但是,并非每个条目都被正确复制(尤其是 vmArgs)。

    在尝试启动我的应用程序之前,我的 .vscode 目录中没有 launch.json 文件。尝试启动我的应用程序后,创建了带有以下内容的 launch.json 文件:

    {
        "configurations": [
            {
                "type": "java",
                "request": "launch",
                "mainClass": "baz.Klass",
                "projectName": "baz_ca302835"
            },
            {
                "type": "java",
                "request": "launch",
                "vmArgs": "--foo arg1 --bar arg2",
                "mainClass": "baz.Klass",
                "projectName": "baz"
            }
        ] 
    }
    

    我只需将 vmArgs 从第二个配置对象复制到第一个配置对象,就可以使用正确的命令行参数成功调用应用程序。

    如果您检查终端并发现在调用您的应用时 vmArgs 不存在,则此解决方案可能适用,因为在我将它们复制到第一个之前,我就是这种情况launch.json 中的配置对象

    【讨论】:

      【解决方案4】:

      如果您想使用 Java Test Runner 扩展来调试单元测试,那么您需要更新您的 settings.json。添加以下部分:

      "java.test.config": {
          "vmArgs": [
              "-Dderby.system.home=D:\DataDir"
          ]
      }
      

      更多信息可以在这里找到:https://code.visualstudio.com/docs/java/java-testing

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-12-16
        • 1970-01-01
        • 2020-12-30
        • 2020-05-22
        • 2019-09-13
        • 2018-02-05
        • 2019-12-29
        相关资源
        最近更新 更多