【问题标题】:Spring initializes differently when run from intellij从 intellij 运行时,Spring 初始化不同
【发布时间】:2015-10-30 15:39:16
【问题描述】:

我希望在 intellij 中的工作流程是右键单击一个 junit @Test 注释方法,然后选择“run method()”。

由于此错误,现在无法正常工作:Could not resolve placeholder 'spring.datasource.url' in string value "${spring.datasource.url}"

这发生在那个值之前,spring.datasource.url 没有在我的application.properties 文件中定义,而是在单独的配置文件中定义。

我的集成测试如下所示:

@RunWith(SpringJUnit4ClassRunner.class)
@SpringApplicationConfiguration(classes = Api.class)
@IntegrationTest
@WebAppConfiguration
@ActiveProfiles(profiles = "h2")
public class ServiceIntegrationTest {

application-h2.properties 定义了 spring.datasource.url

当我从命令行运行mvn test 时,我没有收到上述错误。

问题:

  • 为什么我的测试在 maven 而不是 intellij 下运行正常?
  • intellij 是否以某种方式覆盖了spring.profiles.active
  • 是否可以覆盖在@ActiveProfiles 注释中设置的活动配置文件?

注意:这些是集成测试,但从 intellij 运行单元测试时,我得到了相同的行为。


编辑:

C:\intellij-terminal>mvn -version
Apache Maven 3.3.1 (cab6659f9874fa96462afef40fcf6bc033d58c1c; 2015-03-13T15:10:27-05:00)
Maven home: C:\bin\apache-maven-3.3.1\bin\..
Java version: 1.8.0_60, vendor: Oracle Corporation
Java home: C:\bin\java\jdk1.8.0_60\jre
Default locale: en_US, platform encoding: Cp1252
OS name: "windows 10", version: "10.0", arch: "amd64", family: "dos"

编辑:还尝试将 spring.profiles.active=h2 添加到 intellij 测试运行配置中。


编辑:我注意到 intellij 使用以下命令开始我的测试:

C:\bin\java\jdk1.8.0_60\bin\java  
  -Dmaven.multiModuleProjectDirectory=C:\dev 
  -Dmaven.home=C:\bin\apache-maven-3.3.1 
  -Dclassworlds.conf=C:\bin\apache-maven-3.3.1\bin\m2.conf 
  -Dfile.encoding=windows-1252 
  -classpath 
     C:\bin\apache-maven-3.3.1\boot\plexus-classworlds-2.5.2.jar 
     org.codehaus.classworlds.Launcher 
  -Didea.version=14.1.5 
  org.springframework.boot:spring-boot-maven-plugin:1.2.5.RELEASE:run

问题:

  • 为什么 intellij 试图运行我的应用程序?
  • 有没有办法告诉 intellij 使用指向单个测试的 maven 命令?

【问题讨论】:

  • 您确定您使用的是相同版本的 maven 并且设置了相同的路径吗?这是我想回答你的第一个问题的第一个地方。
  • Intellij 使用的是捆绑的 maven 版本 3。我将 intellij 设置为我的 shell 正在使用的本地安装的 maven 3。结果相同。
  • 在 IntelliJ (Alt-F12) 中打开终端并从命令行运行 mvn 会发生什么?
  • 还尝试将 spring.profiles.active=h2 添加到 intellij 测试运行配置中。
  • 您的 .iml 文件中是否存在优先的内容?顺便说一句,感谢您系统地思考这一点的方式。

标签: java spring maven intellij-idea integration-testing


【解决方案1】:

我删除了.idea/ 和我项目的iml 文件并重新导入。这解决了问题。

【讨论】:

  • 您可能没有可用的新旧 .iml 文件版本。但我想知道您是否弄清楚是什么被删除了,导致配置文件导入失败。
  • 不,我没有:(
【解决方案2】:

我很高兴删除 .iml 文件起到了作用。

另一种可能... mvn package -U 后跟 File-> Invalidate Caches and Restart。

【讨论】:

    猜你喜欢
    • 2016-08-08
    • 1970-01-01
    • 2013-05-08
    • 1970-01-01
    • 2021-12-11
    • 2019-04-28
    • 2020-04-07
    • 1970-01-01
    相关资源
    最近更新 更多