【问题标题】:Starting Spring Boot Application based on maven in "test scope"在“测试范围”中基于 maven 启动 Spring Boot Application
【发布时间】:2020-10-06 14:30:23
【问题描述】:

我编写了一个 Spring Boot 应用程序,它应该在开发过程中使用 H2,并在集成测试和生产过程中使用 mariadb。对于开发,我在 WSL2 中使用带有 Java 扩展的 Visual Studio Code。

在 pom.xml 中,我将 H2 存储库定义为依赖项:

<dependency>
    <groupId>com.h2database</groupId>
    <artifactId>h2</artifactId>
    <version>1.4.200</version>
    <scope>test</scope>
</dependency>

在 VSCode 中,我创建了 3 个启动配置“调试”、“调试(测试)”和“调试(产品)”。在 launch.json 文件中,我为不同的数据库配置定义了 3 个不同的 spring 配置文件。以下是“测试”配置的示例:

{
    "type": "java",
    "name": "Debug (test)",
    "request": "launch",
    "mainClass": "de.frickeldave.fleckerlteppich.telemetry.TelemetryApplication",
    "preLaunchTask": "startmariadb",
    "postDebugTask": "stopmariadb",
    "args": "--spring.profiles.active=test"
} 

问题: 当我在 VSCode 中启动正常的“调试”配置时,我想使用 H2 数据库。但是由于定义 &lt;scope&gt;test&lt;/test&gt; 没有加载依赖项并且应用程序无法连接。当我删除“测试范围”声明(这不是目标)时,它工作得很好。 我该怎么做才能在测试范围内启动应用程序,以便在使用 VSCode 进行调试时使用 H2?有没有我可以添加的起始参数?

提前致谢

问候戴夫

【问题讨论】:

    标签: spring-boot maven visual-studio-code vscode-debugger vscode-tasks


    【解决方案1】:

    范围 test 的依赖关系在运行时不可用。

    它们只能用于构建期间运行的测试。

    【讨论】:

    • 是的,我明白了。我认为问题在于从 VSCode 运行它。在 VSCode 中启动调试会话时,它将使用“/usr/lib/jvm/java-11-openjdk-amd64/bin/java -agentlib:jdwp=transport=dt_socket,server=n,suspend=y,地址=localhost:37173 -Dfile.encoding=UTF-8 @/tmp/cp_4qesk4copx6brwxbvmpbz94yu.argfile de.frickeldave.fleckerlteppich.telemetry.TelemetryApplication”。在这种情况下,当范围为测试时,不会加载 H2。所以我的问题是:当从 Visual Studio 代码中运行应用程序时,我该怎么做才能激活“测试”范围?
    • 对不起,你说你已经明白你不能在运行时使用test作用域依赖,但是你问,在运行应用程序时如何激活它们?我想我不能跟着你。
    • 好吧,我明白了,我解释得不够好。我的问题是,我想使用 Java 扩展从“Visual Studio Code”调试应用程序。 VSCode 通过使用前面显示的参数单击“调试”来启动会话,并正在做“一些魔术”来分析 pom.xml(我认为是这样,因为当我删除测试范围时它正在工作)。我的期望是,当 VSCOde 正在执行应用程序时(因为我单击了调试),必须启用测试范围,对吗?还是我弄错了(我是 Java 新手,很抱歉提出愚蠢的问题)?
    • 你可能错了。我不是 VS Code 专家,但我怀疑使用 Debug 模式会添加测试依赖项。测试依赖项旨在在构建期间用于测试,而不是在您运行应用程序时(在调试模式或其他任何方式下)。如果您确实需要具有更多依赖项的特殊版本的应用程序在运行时对其进行测试,您可能需要添加一个您在构建期间激活的配置文件。
    • 谢谢。我已经认为在这种情况下我必须使用配置文件。你知道 Ecipe 或 Intellij 是否以另一种方式管理它?在测试范围内定义它们时,在调试会话期间是否有可用的依赖项?
    猜你喜欢
    • 2019-11-25
    • 1970-01-01
    • 1970-01-01
    • 2018-03-09
    • 2017-09-03
    • 2020-02-09
    • 1970-01-01
    • 1970-01-01
    • 2019-03-07
    相关资源
    最近更新 更多