oracle-jre的buildpack制作

Javabuildpack的默认运行时环境是openjdk,而平时工作经常使用的是oracle jre,这让一些应用经常会出现莫名其妙的问题。所以制作oracle版本的buildpack

官方文档中显示

To use Oracle JRE instead of OpenJDK without forking java-buildpack, set environment variable:

cf set-env JBP_CONFIG_COMPONENTS ‘{ jres: [ “JavaBuildpack::Jre::OracleJRE” ] }’ cf set-env JBP_CONFIG_ORACLE_JRE ‘{ jre: { repository_root: ““ } }’

这个不是离线版本的buildpack,不过可以指定repo中的oracle jre,那么肯定也可以通过编译的方式制作offline版本的buildpack,思路是这样的,先把oracle jre下载下来,因为oracle不能作为repo被指定,然后上传到文件服务器或者本地搭建文件服务器

首先在oracle官网下载对应的oracle版本,自身服务器是ubuntu14.04,所以使用了jre1.8.0_161 x64位的版本,下载到本地

创建oracle-buildpack文件夹,拷贝jre到文件夹中

配置nginx,搭建本地文件服务器

server{
    listen    5550;
    location ~* \.(html|css|js|png|jpg|gif|ico|jar|war|tar|gz|yml)$ {
        root /Users/ssy/workspace/oracle-buildpack;
    }
}

在同级目录下创建yml文件

vim index.yml 

写入

1.8.0_161: http://localhost:5550/jre-8u161-linux-x64.tar.gz

1.8.0_161是你下载jre的版本号,后面的地址是文件服务器地址

注意按照yml的格式书写,冒号后面一个空格

接下来下载buildpack源码

git clone https://github.com/cloudfoundry/java-buildpack.git
git checkout v3.1

修改config/oracle_jre.yml 文件

jre:
  version: 1.8.0_161
  repository_root: http://localhost:5550/

修改config/components.yml文件

#  - "JavaBuildpack::Jre::OpenJdkJRE"
- "JavaBuildpack::Jre::OracleJRE"

编译buildpack

export BUNDLE_PATH="./vendor"
bundle install
bundle exec rake clean package OFFLINE=true PINNED=true

在buildpack文件夹下面打包好的buildpack

tips:cloudfoundry javabuildpack一个offline版本中openjdk支持的有mac版本、linux14.04、linux16.04等等很多版本却没有oracle版本,oracle版本的buildpack会和openjdk版本的有差异,比如killjvm等,这些在buildpack的使用中满满再踩坑