在使用 Visual Studio 代码调试 spring 引导应用程序时,如何指定要使用的 Maven 配置文件名称?
How do I specify the maven profile name to use when debugging a spring boot app with Visual Studio Code?
这很可能是 this question 的重复,但那里的答案不起作用。
在我的 POM 文件中,我定义了几个类似这样的配置文件:
<profiles>
<profile>
<id>dev</id>
<properties>
<activated-profile>dev</activated-profile>
</properties>
</profile>
...
</profiles>
activated-profile
是 属性 在 application.properties
文件中用来告诉 spring 引导使用什么配置文件:
...
spring.profiles.active=@activated-profile@
...
如果我在cmd提示中运行mvn clean install package spring-boot:repackage -Pdev
,我可以在cmd提示中看到windowThe following profiles are active: dev
,说明正确的配置文件处于活动状态。
如果我尝试从 Visual Studio 代码启动和调试应用程序,在终端中我得到 The following profiles are active: @activated-profile@
.
我尝试在 launch.json
中设置参数:
{
...
"args": ["activated-profile=dev"],
"vmArgs": ["Dactivated-profile=dev"],
...
}
我还尝试在 settings.json
中为 maven 设置自定义环境变量,以及问题中的答案,您肯定会告诉我我重复了:
{
...
"maven.executable.options": "-Pdev",
"maven.terminal.customEnv": [{
"environmentVariable": "activated-profile", "value": "dev"
}],
...
}
我还尝试在 activated-profile
前面加上 -
、--
、D
、-D
或 --D
,以及重命名 activated-profile
到 activatedprofile
以防连字符以某种方式搞砸。
没有任何效果。
让 VS Code 开始调试的唯一方法是在 POM 文件中指定默认配置文件:
<activation>
<activeByDefault>true</activeByDefault>
</activation>
然而,这并不理想,因为每次我想用不同的配置文件构建应用程序时,我都必须删除那段代码,因为 maven 以其无限的智慧决定在我指定它时不覆盖该配置文件在命令行中,渲染 -Pdev
或 -Pint
无用。换句话说,如果我希望 Jenkins 能够构建应用程序,POM 中不应存在 activeByDefault
XML。
以下解决方案假定您已经安装了 Java 扩展包。
如果没有,请继续安装然后继续阅读(Link to install Java Extension Pack)
在您的 launch.json 配置中(运行 - > 打开Configurations)需要使用vmArgs如下:
{
"version": "0.2.0",
"configurations": [
{
"type": "java",
"name": "Launch MyApp",
"request": "launch",
"mainClass": "com.example.MySpringApplication",
"projectName": "myproject",
"vmArgs": " -Dspring.profiles.active=dev"
}
]
}
您可以(当然)同时使用多个配置文件,例如,如果您已经将 Spring 安全配置分离到不同的文件中(例如 devsec-application.yaml):
"vmArgs": " -Dspring.profiles.active=dev,devsec"
这很可能是 this question 的重复,但那里的答案不起作用。
在我的 POM 文件中,我定义了几个类似这样的配置文件:
<profiles>
<profile>
<id>dev</id>
<properties>
<activated-profile>dev</activated-profile>
</properties>
</profile>
...
</profiles>
activated-profile
是 属性 在 application.properties
文件中用来告诉 spring 引导使用什么配置文件:
...
spring.profiles.active=@activated-profile@
...
如果我在cmd提示中运行mvn clean install package spring-boot:repackage -Pdev
,我可以在cmd提示中看到windowThe following profiles are active: dev
,说明正确的配置文件处于活动状态。
如果我尝试从 Visual Studio 代码启动和调试应用程序,在终端中我得到 The following profiles are active: @activated-profile@
.
我尝试在 launch.json
中设置参数:
{
...
"args": ["activated-profile=dev"],
"vmArgs": ["Dactivated-profile=dev"],
...
}
我还尝试在 settings.json
中为 maven 设置自定义环境变量,以及问题中的答案,您肯定会告诉我我重复了:
{
...
"maven.executable.options": "-Pdev",
"maven.terminal.customEnv": [{
"environmentVariable": "activated-profile", "value": "dev"
}],
...
}
我还尝试在 activated-profile
前面加上 -
、--
、D
、-D
或 --D
,以及重命名 activated-profile
到 activatedprofile
以防连字符以某种方式搞砸。
没有任何效果。
让 VS Code 开始调试的唯一方法是在 POM 文件中指定默认配置文件:
<activation>
<activeByDefault>true</activeByDefault>
</activation>
然而,这并不理想,因为每次我想用不同的配置文件构建应用程序时,我都必须删除那段代码,因为 maven 以其无限的智慧决定在我指定它时不覆盖该配置文件在命令行中,渲染 -Pdev
或 -Pint
无用。换句话说,如果我希望 Jenkins 能够构建应用程序,POM 中不应存在 activeByDefault
XML。
以下解决方案假定您已经安装了 Java 扩展包。
如果没有,请继续安装然后继续阅读(Link to install Java Extension Pack)
在您的 launch.json 配置中(运行 - > 打开Configurations)需要使用vmArgs如下:
{
"version": "0.2.0",
"configurations": [
{
"type": "java",
"name": "Launch MyApp",
"request": "launch",
"mainClass": "com.example.MySpringApplication",
"projectName": "myproject",
"vmArgs": " -Dspring.profiles.active=dev"
}
]
}
您可以(当然)同时使用多个配置文件,例如,如果您已经将 Spring 安全配置分离到不同的文件中(例如 devsec-application.yaml):
"vmArgs": " -Dspring.profiles.active=dev,devsec"