在VS代码中调试时向java传递参数

在VS代码中调试时向java传递参数,java,visual-studio-code,Java,Visual Studio Code,在运行java程序时,我需要向java命令传递一个参数。这个参数是“-Dderby.system.home=D:\DataDir”,告诉Java Derby数据库的位置。在Eclipse中,我可以简单地将参数添加到运行配置中,但在VS代码中如何做到这一点我还不知道。如果您安装了Java扩展包,我们将非常感谢您的帮助。 尝试运行包含main的java文件后,应该会看到生成的文件launch.json。如果您使用编辑器打开它,您将能够在运行配置中添加多个标志 您可以添加的标志之一是vmArgs和vm

在运行java程序时,我需要向java命令传递一个参数。这个参数是“-Dderby.system.home=D:\DataDir”,告诉Java Derby数据库的位置。在Eclipse中,我可以简单地将参数添加到运行配置中,但在VS代码中如何做到这一点我还不知道。如果您安装了
Java扩展包,我们将非常感谢您的帮助。

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

您可以添加的标志之一是
vmArgs
和vmArgs(根据其文档):

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


更多信息:

如果您直接在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中的第一个配置对象之前,我就是这样做的。如果您想使用Java测试运行程序扩展调试单元测试,然后需要更新settings.json。添加以下部分:

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

更多信息可在此处找到:

对,在文档中找到。但这是指要传递给程序的main()方法的参数,而不是传递给JRE的参数。这个参数是为了告诉Java在哪里可以找到Derby数据库,所以实际上以jar文件的形式运行这个程序是:Java-Dderby.system.home=D:\DataDir-jar-MyProgram.jarvmArgs就是您要找的那个,对吗?更新了我的答案。看起来这确实是我需要的,但我想我没有使用正确的语法。我尝试了:“vmargs”:“-Dderby.system.home=D:\\DataDir”,但程序找不到数据库。这是从命令行运行程序时使用的语法。。。我想知道VS Code内部是否不仅仅是将该参数添加到“java”命令中。“vmArgs”:“-Dderby.system.home=D:\\DataDir”-请注意vmArgs上的camelCase。我在设置中使用了camel case,但它没有转到我的最后一条评论:-/非常抱歉。在my launch.json文件中输入的复制/粘贴行是:“vmArgs”:“-Dderby.system.home=D:\\DataDir”。结果与原来一样,得到一个数据库文件找不到的异常。也许您可以引用,将参数作为单个字符串元素传递