首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >VSCode、Java、Spring和Maven -环境变量未被读取

VSCode、Java、Spring和Maven -环境变量未被读取
EN

Stack Overflow用户
提问于 2019-09-17 20:30:27
回答 1查看 3.5K关注 0票数 0

注井

请参阅以下问题的编辑部分,因为进一步的调查使这一问题的大部分成为多余的。

this question类似,在使用VSCode时,我似乎无法在启动时将环境变量传递给应用程序。问题是,我不知道是什么(或如果一个)扩展导致了这个问题。

我有VSCode 1.38.1和以下扩展;

  • 语言支持Java0.48.0
  • 扩展包0.8.0
  • Maven for Java0.18.2
  • Spring Boot Dashboard 0.1.6

H 112Spring 1.10.0 <>H 213H 114和其他一些我不觉得的罪魁祸首<代码>H 215F 216

我想要做的是使用maven概要文件有条件地引入依赖项,并使用环境变量来触发这种依赖。在我的pom.xml中,我有;

代码语言:javascript
运行
复制
<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中通过类似的方式传递它;

代码语言:javascript
运行
复制
    {
      "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文件看起来像;

代码语言:javascript
运行
复制
{
  "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时,是否有办法提高日志记录的详细程度,以更好地理解实际执行的内容?

EN

回答 1

Stack Overflow用户

发布于 2021-10-08 23:56:20

在运行vscode驱动测试时,将环境变量放在settings.json而不是launch.json中适用于我:

代码语言:javascript
运行
复制
{
    "java.configuration.updateBuildConfiguration": "automatic",
    "java.test.config": [
        {
            "workingDirectory": "${workspaceFolder}",
            "env": {
                "STAGE_ENV": "DEV",
                "AWS_REGION": "us-west-2"
            }
       }
    ]
}

但是:maven测试不会从中读取。我可以通过在这个位置添加pom中的变量来运行maven测试:

代码语言:javascript
运行
复制
    <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文件来支持这两种情况。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57981663

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档