基于Mac环境Kylin-2.x源码编译

627 阅读3分钟

一、写在前面

1、需求提出

  • 当前环境Kylin版本为2.6,现在需要兼容CDH平台的大数据组件,从Kylin官网下载页面查看到的Kylin-2.6官方匹配CDH版本为5.7和6.0,与要兼容的CDH版本不一致,为避免之后由于版本差异带来的兼容性问题,对Kylin-2.6进行指定CDH版本编译。

2、存在问题

  • 由于Kylin-2.x部分版本相对久远,在Mac环境编译可能存在相关依赖的前端组件版本兼容性问题,现将全流程和趟坑经验分享如下。

二、前置准备

1、编译环境

  • macOS Catalina 10.15.5
  • JDK 8
  • Maven 3.6.3

2、前端环境

  • nodejs
  • bower
  • phantomjs

3、修改pom.xml文件

  • <1>. 添加阿里云仓库,提高依赖下载速度
    • <repository>
        <id>nexus-aliyun</id>
        <name>nexus-aliyun</name>
        <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
        <releases>
            <enabled>true</enabled>
        </releases>
        <snapshots>
            <enabled>false</enabled>
        </snapshots>
      </repository>
      <repository>
        <id>alimaven</id>
        <name>aliyun maven</name>
        <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
      </repository>
      
  • <2>. 修改cdh5.7为对应所要编译的CDH版本
    • vi /XXX/apache-kylin-2.6.0/pom.xml:
    • $> sed -i "s/2.6.0-cdh5.7.0/2.6.0-cdhXXXX/g" `grep "cdh" -rl pom.xml`
      $> sed -i "s/1.1.0-cdh5.7.0/1.1.0-cdhXXXX/g" `grep "cdh" -rl pom.xml`
      $> sed -i "s/1.2.0-cdh5.7.0/1.2.0-cdhXXXX/g" `grep "cdh" -rl pom.xml`
      $> sed -i "s/3.4.5-cdh5.7.0/3.4.5-cdhXXXX/g" `grep "cdh" -rl pom.xml`
      $> sed -i "s/cdh5.7/cdhXXXX/g" `grep "cdh" -rl pom.xml`
      
  • <3>. 找到net.alchim31.maven,对版本取消注释
    • <plugin>
        <groupId>net.alchim31.maven</groupId>
        <artifactId>scala-maven-plugin</artifactId>
        <!-- uncomment this on release -->
        <version>3.4.1</version>
      </plugin>
      

三、编译Kylin

1、编译命令

  • sudo build/script/package.sh -Dmaven.test.skip=true -Dcheckstyle.skip -PcdhXXX
    • 说明:
      • -Dmaven.test.skip=true:跳过单元测试的运行和跳过测试代码的编译
      • -DskipTests:跳过单元测试,但是会继续编译
      • 编译中会执行bower --allow-root install,需要添加sudo

2、编译后续步骤

  • 在/XXX/apache-kylin-2.6.0/build/script/build.sh查看到:

    • #package webapp
      echo 'package front-end'
      cd webapp
      npm install -g bower			 || { exit 1; }
      bower --allow-root install		 || { exit 1; }
      npm install						 || { exit 1; }
      npm install -g grunt-cli		 || { exit 1; }
      grunt dev --buildEnv=dev --buildNumber=`date "+%Y%m%d%H%M%S"`  || { exit 1; }
      
  • 下面报错开始了...

  • <1>. 执行到bower --allow-root install

    • 报错1: image.png

    • 解决:

      • git config --global url."git://".insteadOf https://
      • 或者
      • git config --global url."https://".insteadOf git://
      • 本人使用git config --global url."git://".insteadOf https://解决
    • 报错2:

      • 由于不可知原因,https://github.com/johannestroeger/bower-angular-unstable.git 已经在GitHub消失了...
    • 解决:

      • 修改/XXX/apache-kylin-2.6.0/webapp/bower.json:
      • "angular-mocks-unstable": "~1.1.5"替换为:"angular-mocks": "~1.2.0"
  • <2>. 执行到npm install

    • 报错:
      • phantomjs版本与系统安装版本不一致:
      • phantomjs查找版本:phantomjs-1.9.8
      • phantomjs安装版本:phantomjs-2.1.1
    • 解决:
      • 尝试手动安装部署phantomjs-1.9.8,发现与macOS Catalina 10.15.5不兼容: image.png
      • 查找phantomjs版本校验位置:
      • /XXX/apache-kylin-2.6.0/webapp/package-lock.json
      • 删除phantomjs部分:
      •   "phantomjs": {
            "version": "1.9.20",
            "resolved": "https://registry.npmjs.org/phantomjs/-/phantomjs-1.9.20.tgz",
            "integrity": "sha1-RCSsog4U0lXAsIia9va4lz2hDg0=",
            "dev": true,
            "requires": {
              "extract-zip": "~1.5.0",
              "fs-extra": "~0.26.4",
              "hasha": "^2.2.0",
              "kew": "~0.7.0",
              "progress": "~1.1.8",
              "request": "~2.67.0",
              "request-progress": "~2.0.1",
              "which": "~1.2.2"
            },
            "dependencies": {
              "async": {
                "version": "2.6.3",
                "resolved": "https://registry.npmjs.org/async/-/async-2.6.3.tgz",
                "integrity": "sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==",
                "dev": true,
                "requires": {
                  "lodash": "^4.17.14"
                }
              },
              "boom": {
                "version": "2.10.1",
                "resolved": "https://registry.npmjs.org/boom/-/boom-2.10.1.tgz",
                "integrity": "sha1-OciRjO/1eZ+D+UkqhI9iWt0Mdm8=",
                "dev": true,
                "requires": {
                  "hoek": "2.x.x"
                }
              },
              "combined-stream": {
                "version": "1.0.8",
                "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
                "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==",
                "dev": true,
                "requires": {
                  "delayed-stream": "~1.0.0"
                }
              },
              "cryptiles": {
                "version": "2.0.5",
                "resolved": "https://registry.npmjs.org/cryptiles/-/cryptiles-2.0.5.tgz",
                "integrity": "sha1-O9/s3GCBR8HGcgL6KR59ylnqo7g=",
                "dev": true,
                "requires": {
                  "boom": "2.x.x"
                }
              },
              "delayed-stream": {
                "version": "1.0.0",
                "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
                "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=",
                "dev": true
              },
              "forever-agent": {
                "version": "0.6.1",
                "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz",
                "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=",
                "dev": true
              },
              "form-data": {
                "version": "1.0.1",
                "resolved": "https://registry.npmjs.org/form-data/-/form-data-1.0.1.tgz",
                "integrity": "sha1-rjFduaSQf6BlUCMEpm13M0de43w=",
                "dev": true,
                "requires": {
                  "async": "^2.0.1",
                  "combined-stream": "^1.0.5",
                  "mime-types": "^2.1.11"
                }
              },
              "hawk": {
                "version": "3.1.3",
                "resolved": "https://registry.npmjs.org/hawk/-/hawk-3.1.3.tgz",
                "integrity": "sha1-B4REvXwWQLD+VA0sm3PVlnjo4cQ=",
                "dev": true,
                "requires": {
                  "boom": "2.x.x",
                  "cryptiles": "2.x.x",
                  "hoek": "2.x.x",
                  "sntp": "1.x.x"
                }
              },
              "hoek": {
                "version": "2.16.3",
                "resolved": "https://registry.npmjs.org/hoek/-/hoek-2.16.3.tgz",
                "integrity": "sha1-ILt0A9POo5jpHcRxCo/xuCdKJe0=",
                "dev": true
              },
              "json-stringify-safe": {
                "version": "5.0.1",
                "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz",
                "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=",
                "dev": true
              },
              "lodash": {
                "version": "4.17.21",
                "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
                "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==",
                "dev": true
              },
              "oauth-sign": {
                "version": "0.8.2",
                "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.8.2.tgz",
                "integrity": "sha1-Rqarfwrq2N6unsBWV4C31O/rnUM=",
                "dev": true
              },
              "qs": {
                "version": "5.2.1",
                "resolved": "https://registry.npmjs.org/qs/-/qs-5.2.1.tgz",
                "integrity": "sha1-gB/uAw4LlFDWOFrcSKTMVbRK7fw=",
                "dev": true
              },
              "request": {
                "version": "2.67.0",
                "resolved": "https://registry.npmjs.org/request/-/request-2.67.0.tgz",
                "integrity": "sha1-ivdHgOK/EeoK6aqWXBHxGv0nJ0I=",
                "dev": true,
                "requires": {
                  "aws-sign2": "~0.6.0",
                  "bl": "~1.0.0",
                  "caseless": "~0.11.0",
                  "combined-stream": "~1.0.5",
                  "extend": "~3.0.0",
                  "forever-agent": "~0.6.1",
                  "form-data": "~1.0.0-rc3",
                  "har-validator": "~2.0.2",
                  "hawk": "~3.1.0",
                  "http-signature": "~1.1.0",
                  "is-typedarray": "~1.0.0",
                  "isstream": "~0.1.2",
                  "json-stringify-safe": "~5.0.1",
                  "mime-types": "~2.1.7",
                  "node-uuid": "~1.4.7",
                  "oauth-sign": "~0.8.0",
                  "qs": "~5.2.0",
                  "stringstream": "~0.0.4",
                  "tough-cookie": "~2.2.0",
                  "tunnel-agent": "~0.4.1"
                }
              },
              "sntp": {
                "version": "1.0.9",
                "resolved": "https://registry.npmjs.org/sntp/-/sntp-1.0.9.tgz",
                "integrity": "sha1-ZUEYTMkK7qbG57NeJlkIJEPGYZg=",
                "dev": true,
                "requires": {
                  "hoek": "2.x.x"
                }
              },
              "tunnel-agent": {
                "version": "0.4.3",
                "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.4.3.tgz",
                "integrity": "sha1-Y3PbdpCf5XDgjXNYM2Xtgop07us=",
                "dev": true
              },
              "which": {
                "version": "1.2.14",
                "resolved": "https://registry.npmjs.org/which/-/which-1.2.14.tgz",
                "integrity": "sha1-mofEN48D6CfOyvGs31bHNsAcFOU=",
                "dev": true,
                "requires": {
                  "isexe": "^2.0.0"
                }
              }
            }
          },
        

四、结束

image.png

  • 安装包位置:
    • /XXX/apache-kylin-2.6.0/dist:
    • apache-kylin-2.6.0-bin.tar.gz