在VS代码中调试时向java传递参数
在运行java程序时,我需要向java命令传递一个参数。这个参数是“-Dderby.system.home=D:\DataDir”,告诉Java Derby数据库的位置。在Eclipse中,我可以简单地将参数添加到运行配置中,但在VS代码中如何做到这一点我还不知道。如果您安装了在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扩展包,我们将非常感谢您的帮助。
尝试运行包含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”。结果与原来一样,得到一个数据库文件找不到的异常。也许您可以引用,将参数作为单个字符串元素传递