VSCode,Java,Spring Boot和Maven-无法读取环境变量

时间:2019-09-17 20:30:27

标签: java maven spring-boot visual-studio-code

请注意

请参见下面问题的编辑部分,因为进一步的调查已使该问题的大部分重复。


类似于this question,在使用VSCode时,启动时似乎无法将环境变量传递给我的应用程序。问题是,我不知道是什么(或是否有)扩展引起了问题。

我有带有以下扩展名的VSCode 1.38.1;

  • 对Java 0.48.0的语言支持
  • Java扩展包0.8.0
  • Maven for Java 0.18.2
  • Spring Boot仪表板0.1.6
  • Spring Boot Tools 1.10.0
  • 其他一些我不认为是罪魁祸首。

我想要做的是使用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键时,是否有办法提高日志记录的详细程度,以便更好地了解实际执行的内容?

0 个答案:

没有答案