在使用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が生成される。
使用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
应该会动。