部署到Heroku时自定义Maven命令

时间:2018-08-09 11:32:38

标签: maven heroku deployment

我们使用Spring REST Docs从测试中生成文档。将应用程序部署到Heroku时,默认情况下会跳过测试,正如我在日志中清楚看到的那样:

-----> Java app detected
-----> Installing JDK 1.8... done
-----> Installing Maven 3.3.9... done
-----> Executing: mvn -DskipTests clean dependency:list install
[INFO] Scanning for projects...
[INFO]   

如何自定义由Heroku执行的Maven命令?

1 个答案:

答案 0 :(得分:0)

经过一天的搜索,我发现了两种启用Heroku构建测试的可能方法:

  1. pom.xml中配置Maven Surefire Plugin
  2. 自定义Heroku Java Buildpack

Maven Surefire插件

pom.xml中的配置在启动Maven进程时会覆盖命令行参数。

您可以通过在Maven Surefire插件配置中禁用-DskipTests来撤消skipTests,如下所示:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-surefire-plugin</artifactId>
    <configuration>
        <skipTests>false</skipTests>
    </configuration>
</plugin>
  

请注意,Heroku在运行Maven时会添加环境变量。确保在Spring test配置文件中运行时使用内存数据库,否则构建将失败。

     

就我而言,我使用Flyway进行数据库迁移。出于某些奇怪的原因,无论我的spring.datasource.url中的application-test.yml,Flyway都使用了环境变量值。如果您遇到相同的问题,请注意,您也可以使用Maven Surefire插件的argLine配置属性来覆盖它们。

     

<argLine>-DDATABASE_URL=jdbc:h2:mem:questflair -DJDBC_DATABASE_URL=jdbc:h2:mem:questflair -DSPRING_DATASOURCE_URL=jdbc:h2:mem:questflair</argLine>

Heroku Java Buildpack

根据Heroku Java Buildpack文档,您可以自定义Maven选项和目标。

我没有尝试此解决方案,请参见Customize Maven,以获取更多信息。