注井
请参阅以下问题的编辑部分,因为进一步的调查使这一问题的大部分成为多余的。
与this question类似,在使用VSCode时,我似乎无法在启动时将环境变量传递给应用程序。问题是,我不知道是什么(或如果一个)扩展导致了这个问题。
我有VSCode 1.38.1和以下扩展;
H 112
Spring 1.10.0 <>H 213H 114
和其他一些我不觉得的罪魁祸首<代码>H 215F 216
我想要做的是使用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>
我试图通过设置env
值在launch.json中通过类似的方式传递它;
{
"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扩展似乎表明"...These环境变量值将在 Maven第一次执行之前添加到终端会话中“。我的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来执行我的应用程序,据我所知,它执行上面的launch.json片段中显示的内容。我不太明白这里是如何调用maven的。但是,无论如何,它似乎都找不到环境变量,因此包含特定于概要文件的mysql依赖项。即使我使用Spring,我也得到了相同的结果;mysql依赖项没有被识别,所以我最终使用了Cannot load driver class: com.mysql.cj.jdbc.Driver
如果我注释掉了pom.xml的pom.xml元素,取消了<os>
元素的注释,那么它确实带来了特定于概要文件的mysql依赖项。所以我猜它正确地使用了pom文件。
有没有人知道如何设置环境变量,以便通过这种配置来识别它们?此外,如果您进一步了解使用此设置访问F5
时实际执行的内容(它是maven,还是Java),我们将不胜感激。
编辑:
一些进一步的调查表明,我是"...confusing Environment Variables with System Properties"评论的韦特利文斯。
This post还建议,“您不能基于在构建计划开始执行后定义的系统属性来激活配置文件”,这很可能是当我点击F5来执行我的应用程序时所发生的事情。这还链接到this answer中的一些更多信息,这些信息阐明,如果不能工作,"...profiles是确定有效POM的第一件事。“
我的解决办法是不使用F5,但是当我设置了spring-profiles-active=local-mysql
时,我必须使用Maven for Java来执行spring-boot:run -Pdev-mysql
的自定义目标
所以我最后的问题是;
考虑到我向VSCode添加的扩展与上面的launch.json相结合,当我使用这个设置访问F5
时实际执行了什么-是Maven、Java还是其他什么东西?如果是Java,pom.xml是如何发挥作用的?如果是Java,那么是否有一种方法可以调整launch.json来使用mvn
呢?
当我点击F5时,是否有办法提高日志记录的详细程度,以更好地理解实际执行的内容?
发布于 2021-10-08 23:56:20
在运行vscode驱动测试时,将环境变量放在settings.json而不是launch.json中适用于我:
{
"java.configuration.updateBuildConfiguration": "automatic",
"java.test.config": [
{
"workingDirectory": "${workspaceFolder}",
"env": {
"STAGE_ENV": "DEV",
"AWS_REGION": "us-west-2"
}
}
]
}
但是:maven测试不会从中读取。我可以通过在这个位置添加pom中的变量来运行maven测试:
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>3.2.4</version>
</plugin>
<plugin>
<!-- run unit tests -->
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.22.2</version>
<configuration>
<environmentVariables>
<!-- add them here -->
<STAGE_ENV>DEV</AWS_ACCESS_KEY>
<AWS_REGION>us-west-2</AWS_REGION>
<!-- -->
</environmentVariables>
</configuration>
</plugin>
</plugins>
</build>
我还没有找到一个好的解决方案来使用单个.env文件来支持这两种情况。
https://stackoverflow.com/questions/57981663
复制相似问题