Rainbond 可以将 Java 程序轻松部署到平台,并提供灵活伸缩的高可用特性。您可以部署标准的基于 Tomcat 或 Jetty 的 Web 应用,同时也支持 SpringBoot 等框架构建的应用程序。我们致力于在不改变开发习惯情况下将您的 Java 应用在云端快速部署、运行、灵活伸缩!

一、代码识别

Rainbond 支持部署打包成 Jar 包, War 包的项目, 或者 Maven, Gradle 管理的项目

1.1 Jar 包

若您将您的代码打包为Jar包,您需要将您的Jar包存放至所提交文件目录的根目录下;在根目录下创建LANGUAGE文件,写入内容java-jar 。两个条件都满足的情况下,识别为Jar包项目。Rainbond称其为 Java-jar

1.2 War 包

若您将您的代码打包为War包,您需要将您的War包存放至所提交文件目录的根目录下,云帮会检测根目录中是否存在<文件名>.war,若存在则识别该项目为war包项目,Rainbond称其为 Java-war

1.3 Maven 项目

对于 Maven 项目, Rainbond 会通过pom.xml来识别项目的类型. 若您提交的项目根目录中包含文件 pom.xml, 则该项目会被识别为 Maven 项目.

1.4 Gradle 项目

对于 Gradle 项目, Rainbond 会通过build.gradle来识别项目的类型. 若您提交的项目根目录中包含文件 build.gradle, 则该项目会被识别为 Gradle 项目.

提示:

当上述情况同时存在时,Rainobnd 识别代码的优先级为: Dockerfile > Jar 包 > War 包 > Maven 项目 > Gradle 项目

二、Java运行时环境

组件 支持的版本 默认值
JDK 1.6, 1.7, 1.8 1.8
MAVEN 3.0.5, 3.1.1, 3.2.5, 3.3.1 3.3.1
TOMCAT 6.0.41, 7.0.56, 8.0.14 7.0.56

以上各组件,您可以在平台创建应用的向导中选择,也可以自行配置支持的版本:

提示:

Rainbond默认提供的 JDK 为 OpenJDK,如果需要使用 OracleJDK,请自行使用 Dockerfile 指定。

2.1 配置 JDK

Rainbond 支持的 JDK 版本值为 1.6,1.7, 1.8 ,默认的版本为 1.8. 若您需要其他版本的 JDK, 可以向所提交代码的根目录中添加 system.properties 文件,通过设定java.runtime.version 来指定一个Java版本:

copy



# icon/buttons/copy

  1. java.runtime.version=1.8

2.2 配置 Maven

Rainbond 默认的 Maven 版本是 3.3.1. 您也可以在 system.properties 通过 参数 maven.version 指定一个您需要的 Maven 版本:

copy



# icon/buttons/copy

  1. maven.version=3.3.1

如果设置了 maven.versionmvnw 脚本将会被忽略.

兼容的 maven 版本为 3.0.5, 3.1.1, 3.2.5, 3.3.1, 3.3.9, 默认为3.3.1.

3.3 配置 Gradle

目前使用的 Gradle 的版本是 4.10.2, 暂不支持配置.

三、示例:部署war/jar包

Rainbond为了让您更方便的部署项目,特推出识可别 War包Jar包 的构建模式,云帮分别称为Java-war与Java-jar。上文提到了 War包Jar包 的代码识别方式及构建环境。

示例代码:

  • java-war-demo 请忽略代码中的源码目录src ,您需要的只是war包和自定义的system.properties 配置文件。
  • java-jar-demo

3.1 部署war包

WAR文件是JAR文件的一种,其中包含JSP、Java Servlet、Java类、XML文件、标签库、静态网页(HTML和相关文件),以及构成Web应用程序的其他资源,它的扩展名为.war。云帮平台支持WAR文件运行。

在代码根目录上传好War包后,通过源码构建即可。

3.2 部署jar包

在代码根目录上传好Jar包后,通过创建Procfile来指定运行命令。比如在您正常部署的时候,使用java -jar demo.jar的命令来运行,那么在Procfile中定义如下:

copy



# icon/buttons/copy

  1. web: java $JAVA_OPTS -jar demo.jar

完成后,通过源码构建即可。

四、示例:基于Maven构建应用

Rainbond 通过 maven 对包含 pom.xml 文件的 java项目进行构建,最终根据 pom.xml 中的打包需求生成 jar包 或者 war包。

本文以好雨官方 java-maven-demo 为示例进行说明。

4.1 打包

Rainbond 检测出项目为 maven 项目后,在构建阶段会将代码打包,在pom.xml文件中示例程序将编译后的文件打包为war包。

pom.xml

copy



# icon/buttons/copy

  1. ...
  2. ...
  3. <packaging>war</packaging>
  4. ...
  5. ...

4.2 自动构建

平台检测为java-maven项目后,会自动通过mvn命令进行构建操作,具体的构建命令为:

copy



# icon/buttons/copy

  1. mvn -B -DskipTests=true -Dmaven.wagon.http.ssl.insecure=true -Dmaven.wagon.http.ssl.allowall=true clean install

提示:

后续版本会引入自定义maven构建命令的功能。

4.3 应用运行

平台默认通过 webapp-runner.jar 将打包的 war 包运行起来,类似如下命令:

copy



# icon/buttons/copy

  1. java $JAVA_OPTS -jar /opt/webapp-runner.jar --port $PORT target/*.war

提示:

  • JAVA_OPTS : 平台会根据应用的内存大小,自动设置Xmx和Xms的值
  • PORT : 默认监听端口为 5000

4.4 自定义运行命令

用户可以通过在代码根目录创建 Procfile 文件并编辑该文件,实现自定义运行命令:

copy



# icon/buttons/copy

  1. web: java $JAVA_OPTS -jar target/*.jar

注意:

自定义启动命令时需要注意Procfile文件的格式:

  • 必须以 web: 开头
  • 文件结尾不能包含特殊字符

本文示范demo源码:java-maven-demo

五、示例:Gradle 项目的构建

接下来, 将会通过java-gradle-demo这个 Gradle 项目进行演示和说明. java-gradle-demo是一个由 Gradle 管理的 Spring Boot 项目, 作用是打印"Hello Java Gradle Demo!". 它的目录树如下:

  1. .
  2. ├── build.gradle
  3. ├── gradle
  4. └── wrapper
  5. ├── gradle-wrapper.jar
  6. └── gradle-wrapper.properties
  7. ├── gradlew
  8. ├── settings.gradle
  9. └── src
  10. ├── main
  11. ├── java
  12. └── com
  13. └── rainbond
  14. └── javagradledemo
  15. ├── JavaGradleDemoApplication.java
  16. └── controller
  17. └── HelloController.java
  18. └── resources
  19. └── application.properties

可以看出来, 该项目包含 build.gradle, gradlew,gradle/wrapper/gradle-wrapper.jargradle/wrapper/gradle-wrapper.properties

项目的 Github 地址: java-gradle-demo

5.1 验证您的构建文件是否已正确设置

由于 java-gradle-demo 是一个 Spring boot 项目, Rainbond 底层的 Gradle buildpack 会执行 ./gradlew build -x test进行验证. 对于没有使用框架的项目, 将会执行 ./gradlew stage.

5.2 应用运行

对于 Spring Boot 项目, Rainbond 在默认情况下, 会用以下命令去执行打包好的 Jar 包:
java -Dserver.port=$PORT $JAVA_OPTS -jar build/libs/*.jar

您也可以通过在代码根目录创建 Procfile 文件并编辑该文件,实现自定义运行命令:

copy



# icon/buttons/copy

  1. web: java $JAVA_OPTS -jar target/*.jar

注意:

自定义启动命令时需要注意Procfile文件的格式:

  • 必须以 web: 开头
  • 文件结尾不能包含特殊字符

六、相关文章

原文: https://www.rainbond.com/docs/stable/user-manual/app-creation/language-support/java.html