请注意
请参见下面问题的编辑部分,因为进一步的调查已使该问题的大部分重复。
类似于this question,在使用VSCode时,启动时似乎无法将环境变量传递给我的应用程序。问题是,我不知道是什么(或是否有)扩展引起了问题。
我有带有以下扩展名的VSCode 1.38.1;
我想要做的是使用Maven配置文件有条件地引入依赖关系,并使用环境变量来触发依赖关系。在我的pom.xml中;
<profiles>
<profile>
<id>dev-mysql</id>
<activation>
<!-- activate if system properties 'env=dev-mysql' passed in on launch.json env property from VSCode -->
<!-- Following does not work :( -->
<property>
<name>env</name>
<value>dev-mysql</value>
</property>
<!-- Obtain the following info by running - mvn enforcer:display-info -->
<!-- <os>
<name>windows 7</name>
<family>windows</family>
<arch>amd64</arch>
<version>6.1</version>
</os> -->
</activation>
<dependencies>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.17</version>
</dependency>
</dependencies>
</profile>
</profiles>
我尝试通过类似的方式在launch.json中设置env
值,并将其传递给
{
"type": "java",
"name": "Debug (Launch)-MyServiceApplication<my-service>",
"request": "launch",
"mainClass": "myapp.MyServiceApplication",
"projectName": "my-service",
"vmArgs": "-Dspring.profiles.active=local-mysql",
"env": {
"env": "dev-mysql"
}
}
我还尝试通过settings.json添加maven customEnv,因为Maven for Java扩展似乎建议“ ...这些环境变量值将在之前添加到终端会话中。首先执行”。我的settings.json文件看起来像;
{
"java.configuration.updateBuildConfiguration": "automatic",
"files.exclude": {
"**/.classpath": true,
"**/.project": true,
"**/.settings": true,
"**/.factorypath": true
},
"maven.terminal.customEnv": [
{
"environmentVariable": "env",
"value": "dev-mysql"
}
]
}
我按F5执行我的应用程序,据我所知,F5执行上面的launch.json代码段中显示的内容。我不太了解如何在这里调用Maven。但是,无论如何,它似乎永远找不到环境变量,因此没有包含特定于配置文件的mysql依赖项。即使我使用Spring Boot Dashboard,也会得到相同的结果。 mysql依赖项无法识别,所以我以Cannot load driver class: com.mysql.cj.jdbc.Driver
如果我注释掉pom.xml的<property>
元素并取消注释<os>
元素,则它确实引入了特定于配置文件的mysql依赖项。因此,我猜测它正确使用了pom文件。
有人知道如何设置环境变量,以便通过这种配置识别它们吗?另外,关于当我使用此设置命中F5
时实际执行的操作的任何进一步信息(是Maven,是Java),将不胜感激。
编辑:
一些进一步的调查表明,我是Wouter Lievens的"...confusing Environment Variables with System Properties" 评论。
This post还建议“您不能基于开始执行构建计划后定义的系统属性来激活配置文件”,这很可能就是我按F5键执行应用程序时发生的情况。这还链接到this answer中的一些其他信息,这些信息阐明了如果不能作为“ ...配置文件是确定有效POM之前首先要进行评估的第一件事。”
我的解决方法是不使用F5,而是在设置spring-profiles-active=local-mysql
时使用Maven for Java Explorer执行自定义目标spring-boot:run -Pdev-mysql
所以我的最后一个问题是
考虑到我添加到VSCode中的扩展名以及上面的launch.json,当我使用此设置击中F5
时实际上执行的是Maven,Java还是其他?如果是Java,那么pom.xml如何发挥作用?如果是Java,是否有一种方法可以将launch.json调整为改用mvn
?
当我按F5键时,是否有办法提高日志记录的详细程度,以便更好地了解实际执行的内容?