我们经常要编译各种框架和软件,但是都在一台机器上编译好不好呢?
我觉得不好,因为很多框架和软件的依赖是有冲突的,比如有些需要JDK 1.7有些需要JDK 1.8,还有各种依赖库,这些都揉在编译机里,那机器的环境很快就会变成乱七八糟了,即使用脚本和 bash_profile 我认为都是不够的。
所以我一般都是在容器里去做软件的编译,我只要保证我的编译机上的 docker 是正常的就好了,当然了,要搞定不同类型不同语言的框架和软件在容器里编译,除了要有框架软件相关的知识以外,还需要比较熟悉 docker 和容器,只要玩的溜了,其实有很多不同的方法,总之就是殊途同归,不一样的风骚玩法,同样的结果。
今天有同事让我看看他编译的 kylin 有什么问题,我看了一下报错信息。
这个问题好解决,虽然我没看过 maven gpg 这个插件的源码,但看名字大概能猜到一二,反正就是该同学的编译机上没有 gpg 这个软件就是了。关于怎么装 gpg 就不赘述了,谷歌有的。
一般遇到这种问题,我可能都会直接在 docker hub 上一下合适的镜像,然后直接把项目 git clone 进去,然后就开始编译。对于 kylin,看一下 pom 文件,我一下子就锁定了 maven+jdk 的镜像了 maven:3.8.1-openjdk-17-slim。
docker run -it --network=host --mount type=bind,source=/root/.m2,target=/root/.m2 --entrypoint=bash --rm maven:3.8.1-openjdk-17-slim
–network 是为了用本机的网络,–mount 是为了把我的 .m2 文件夹挂载到容器,这样很多依赖我本地有,就不需要走网络继续去拉取了。
build/script/package.sh -Dmaven.test.skip=true -Dcheckstyle.skip -Papache-release -pl storage-hbase
然后就到 kylin 文件夹下面执行 mvn 的命令就完事了。当然执行的时候会有些环境的问题,比如镜像里没有 git,还有 kylin 编译需要本地有 npm,第一次编译的时候就说 npm 没找到了,那就在容器里装一下好了。
apt-get install git npm