部署JavaWeb应用到Heroku

一、部署前提

  1. maven项目
  2. pom.xml添加jetty-runner(plugin)

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    <plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-dependency-plugin</artifactId>
    <version>2.3</version>
    <executions>
    <execution>
    <phase>package</phase>
    <goals><goal>copy</goal></goals>
    <configuration>
    <artifactItems>
    <artifactItem>
    <groupId>org.eclipse.jetty</groupId>
    <artifactId>jetty-runner</artifactId>
    <version>9.2.18.v20160721</version>
    <destFileName>jetty-runner.jar</destFileName>
    </artifactItem>
    </artifactItems>
    </configuration>
    </execution>
    </executions>
    </plugin>

    本地测试(按需更换version):
    jdk1.7+: <version>9.2.18.v20160721</version>
    jdk1.8+: <version>9.3.10.v20160621</version>

  3. 有本地依赖jar包需要添加resource
    比如本项目依赖smartqq-1.0.jar(远程仓库没有smartqq-1.0.jar),maven打包时会将本地依赖jar打包进target

    1
    2
    3
    4
    5
    6
    7
    <resource>
    <directory>${project.basedir}/src/main/resources/lib</directory>
    <targetPath>${project.basedir}/target/xiaov/WEB-INF/lib</targetPath>
    <includes>
    <include>**/smartqq-1.0.jar</include>
    </includes>
    </resource>
  4. 在项目根目录创建Procfile文件,没有任何后缀,并添加:

    1
    web: java $JAVA_OPTS -cp target/dependency/jetty-runner.jar org.eclipse.jetty.runner.Runner --port $PORT target/*.war

    heroku官网教程:文档感觉是没更新,高版本jetty-runer是没有主料清单的,按照官网的教程应用是无法跑起来的

二、部署完毕

  对于部署在heroku的APP,免费是有一些限制(点击查看),网站在30分钟后若是没有任何request请求的,APP会自动睡眠。因此,可以使用360网站服务监控,定时向某个指定网站发送request请求,避免heroku部署的APP自动进入睡眠。

评论