Javabuildpack的默认运行时环境是openjdk,而平时工作经常使用的是oracle jre,这让一些应用经常会出现莫名其妙的问题。所以制作oracle版本的buildpack
在官方文档中显示
To use Oracle JRE instead of OpenJDK without forking java-buildpack, set environment variable:
cf set-env
这个不是离线版本的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的使用中满满再踩坑