在使用Heroku和Gradle部署Spring Boot时的技巧

Heroku和Spring Boot

在将spring-boot部署到Heroku时,有很多不同的方式可以指定Procfile。但是在我找到了一个适合的方式后,我记笔记了。
此外,我使用Gradle而不是Maven进行部署。

准备Gradle

Gradle使用GVM(Groovy环境管理器)进行安装。详情请参考此处链接。

关于在Mac上安装Gradle以及使用GVM命令的方法总结。

准备build.gradle文件

将build.gradle文件放置在项目根目录下(类似于maven中的pom.xml位置)。

buildscript {
  repositories {
    mavenCentral()
  }
  dependencies {
    classpath("org.springframework.boot:spring-boot-gradle-plugin:1.2.3.RELEASE")
  }
}

apply plugin: 'java'
apply plugin: 'idea'
apply plugin: 'spring-boot'

jar {
  baseName = 'spring-boot-sample'
  version =  '0.1.0'
}

repositories {
  mavenCentral()
}

sourceCompatibility = 1.8
targetCompatibility = 1.8

dependencies {
  // tag::jetty[]
  compile("org.springframework.boot:spring-boot-starter-web") {
    exclude module: "spring-boot-starter-tomcat"
  }
  compile("org.springframework.boot:spring-boot-starter-jetty")
  // end::jetty[]
  // tag::actuator[]
  compile("org.springframework.boot:spring-boot-starter-actuator")
  // end::actuator[]
  testCompile("junit:junit")
}

defaultTasks "clean", "build"

task wrapper(type: Wrapper) {
  gradleVersion = '2.4'
}

使用gradle wrapper生成gradlew文件

我以为不懂这个步骤就无法使用Gradle。

gradle wrapper
    • プロジェクト直下にgradlewファイルが生成される。(gradlew.batはWindowds用らしい)

 

    プロジェクト配下にgradleディレクトリが生成され、中にgradle-wrapper.jarが生成される。
image

使用gradlew进行启动试试看。

./gradlew build && java -jar build/libs/spring-boot-sample-0.1.0.jar

※ 如果在这里无法启动,就无法进一步进行下去。

我参考了以下页面。

使用Gradle构建的Spring Boot应用在Heroku上运行

修改Procfile。

web: java -jar build/libs/spring-boot-sample-0.1.0.jar --server.port=$PORT

尝试在foreman上启动

foreman start web

若可以启动,请确认是否存在正确命名的 jar 文件。如果找不到 jar 文件,请尝试执行 gradlew build。

为了防止不必要的文件被提交,向.gitignore添加设置。

.idea
/build/
/.gradle/
spring-boot-sample.iml

gradle目录是必需的,但.gradle和build都是不必要的。

Heroku的自定义构建包设置

Heroku构建套件-Gradlew

阅读了 README 发现步骤似乎有点不同,但因为它正常运行,所以我认为没有问题。

heroku config:set BUILDPACK_URL=https://github.com/marcoVermeulen/heroku-buildpack-gradlew.git

提交到git,然后将其推送到heroku上。

git push heroku master

查看Heroku的日志,确保没有错误。

heroku logs

确认启动

heroku open

应该会动。

广告
将在 10 秒后关闭
bannerAds