天天看點

編譯hbase-1.2.3源代碼 目錄 1. 約定 2. 安裝jdk 3. 安裝maven 4. 網絡配置 5. 從hbase官網下載下傳源代碼包: 6. eclipse導入hbase源代碼 7. 編譯hbase-thrift 8. Problems opening an editor ... does not exist 9. hbase-common

編譯hbase-1.2.3源代碼 目錄 1. 約定 2. 安裝jdk 3. 安裝maven 4. 網絡配置 5. 從hbase官網下載下傳源代碼包: 6. eclipse導入hbase源代碼 7. 編譯hbase-thrift 8. Problems opening an editor ... does not exist 9. hbase-common

<a href="#_Toc20081%20">目錄 1</a>

<a href="#_Toc12233%20">1. 約定 1</a>

<a href="#_Toc15799%20">2. 安裝jdk 1</a>

<a href="#_Toc27331%20">3. 安裝maven 1</a>

<a href="#_Toc22797%20">4. 網絡配置 2</a>

<a href="#_Toc17%20">4.1. eclipse 3</a>

<a href="#_Toc32458%20">4.2. maven 3</a>

<a href="#_Toc2815%20">5. 從hbase官網下載下傳源代碼包: 4</a>

<a href="#_Toc25136%20">6. eclipse導入hbase源代碼 4</a>

<a href="#_Toc27234%20">7. 編譯hbase-thrift 6</a>

<a href="#_Toc25837%20">8. Problems opening an editor ... does not exist 10</a>

<a href="#_Toc18068%20">9. hbase-common 11</a>

確定機器可以正常通路Internet,如能正常通路https://repo.maven.apache.org等,如果是代理方式則需要設定好eclipse和maven的網絡配置。

本文環境為64位版本Windows7,jre安裝目錄為C:\java\jdk1.8.0_111,jdk安裝目錄為C:\java\jre1.8.0_111。

最好将jre安裝在在jdk目錄下,否則編譯時會遇到“Could not find artifact jdk.tools:jdk.tools:jar”錯誤。将jre安裝在jdk目錄下的目的是使得jre的上一級存在jdk的lib目錄。

略!安裝好後請設定環境變量JAVA_HOME為jdk的安裝目錄(不是javac所在的bin目錄,而是bin的上一級目錄)。

從maven官網下載下傳安裝包(本文下載下傳的是apache-maven-3.3.9-bin.zip):

<a href="https://maven.apache.org/download.cgi">https://maven.apache.org/download.cgi</a>

解壓後,将maven的bin目錄加入到環境變量PATH中,本文對應的目錄為C:\Program Files\apache-maven-3.3.9\bin。并設定環境變量M2_HOME的值為maven的安裝目錄,對于本文M2_HOME值為C:\Program Files\apache-maven-3.3.9

然後設定eclipse使用外部的maven,進入eclipse的Preferences中按下圖進行設定:

編譯hbase-1.2.3源代碼 目錄 1. 約定 2. 安裝jdk 3. 安裝maven 4. 網絡配置 5. 從hbase官網下載下傳源代碼包: 6. eclipse導入hbase源代碼 7. 編譯hbase-thrift 8. Problems opening an editor ... does not exist 9. hbase-common

確定機器可以正常通路Internet,否則大量問題難以解決。如果是通過代理才能通路,則需要為eclipse和maven配置好代理。

編譯hbase-1.2.3源代碼 目錄 1. 約定 2. 安裝jdk 3. 安裝maven 4. 網絡配置 5. 從hbase官網下載下傳源代碼包: 6. eclipse導入hbase源代碼 7. 編譯hbase-thrift 8. Problems opening an editor ... does not exist 9. hbase-common

編輯$HOME/.m2目錄下的settings.xml,如果不存在該檔案,則複制$MAVEN_HOME/conf目錄下的settings.xml,然後再修改即可同。

MAVEN_HOME為maven的安裝目錄,$HOME/.m2為repository的預設目錄,HOME為Windows使用者目錄,Windows7上假設使用者名為mike則HOME為C:\Users\mike。

假設代理伺服器的位址和端口分别為:proxy.oa.com和8080,則(不需要使用者名或密碼,則相應的值不設定即可):

      http-proxy

      true

      http

      proxy.oa.com

      8080

      local|127.0.0.1

      https-proxy

      https

以下網站均提供hbase源代碼包下載下傳:

<a href="http://mirrors.hust.edu.cn/apache/hbase/">http://mirrors.hust.edu.cn/apache/hbase/</a>

<a href="https://mirrors.tuna.tsinghua.edu.cn/apache/hbase/">https://mirrors.tuna.tsinghua.edu.cn/apache/hbase/</a>

<a href="http://mirror.bit.edu.cn/apache/hbase/">http://mirror.bit.edu.cn/apache/hbase/</a>

<a href="http://apache.fayea.com/hbase/">http://apache.fayea.com/hbase/</a>

本文下載下傳的是hbase-1.2.3-src.tar.gz。

本文使用的eclipse版本:

編譯hbase-1.2.3源代碼 目錄 1. 約定 2. 安裝jdk 3. 安裝maven 4. 網絡配置 5. 從hbase官網下載下傳源代碼包: 6. eclipse導入hbase源代碼 7. 編譯hbase-thrift 8. Problems opening an editor ... does not exist 9. hbase-common

将hbase-1.2.3-src.tar.gz解壓,本文将其解壓到目錄E:\bigdata\hbase-1.2.3-src,然後以“Existing Maven Projects”方式導入:

編譯hbase-1.2.3源代碼 目錄 1. 約定 2. 安裝jdk 3. 安裝maven 4. 網絡配置 5. 從hbase官網下載下傳源代碼包: 6. eclipse導入hbase源代碼 7. 編譯hbase-thrift 8. Problems opening an editor ... does not exist 9. hbase-common
編譯hbase-1.2.3源代碼 目錄 1. 約定 2. 安裝jdk 3. 安裝maven 4. 網絡配置 5. 從hbase官網下載下傳源代碼包: 6. eclipse導入hbase源代碼 7. 編譯hbase-thrift 8. Problems opening an editor ... does not exist 9. hbase-common

成功導入後如下圖所示:

編譯hbase-1.2.3源代碼 目錄 1. 約定 2. 安裝jdk 3. 安裝maven 4. 網絡配置 5. 從hbase官網下載下傳源代碼包: 6. eclipse導入hbase源代碼 7. 編譯hbase-thrift 8. Problems opening an editor ... does not exist 9. hbase-common

以maven編譯hbase源代碼,編譯整個hbase容易遇到錯誤,比如編譯hbase-common需要安裝bash,hbase-thrift、但hbase-server、hbase-client等子產品不依賴bash。為簡單體驗,先定一個小目标:編譯hbase-thrift子產品:

滑鼠右擊hbase-thrift,按下圖進入設定界面:

編譯hbase-1.2.3源代碼 目錄 1. 約定 2. 安裝jdk 3. 安裝maven 4. 網絡配置 5. 從hbase官網下載下傳源代碼包: 6. eclipse導入hbase源代碼 7. 編譯hbase-thrift 8. Problems opening an editor ... does not exist 9. hbase-common

設定界面如下圖所示,并設定Goals為clean install -DskipTests(注意不是clean install,需要加上-DskipTests,否則即使勾選了Skip Tests也可能無效):

編譯hbase-1.2.3源代碼 目錄 1. 約定 2. 安裝jdk 3. 安裝maven 4. 網絡配置 5. 從hbase官網下載下傳源代碼包: 6. eclipse導入hbase源代碼 7. 編譯hbase-thrift 8. Problems opening an editor ... does not exist 9. hbase-common

然後點選“Run”即開始編譯!

編譯過程中如遇到下面的錯誤,請确認是否存在目錄C:\java\jre1.8.0_111/../lib,其用意是jre安裝在jdk的目錄下,也就是說lib需要為jdk的lib目錄。

簡單的做法是複制jdk的lib目錄到C:\java目錄下。

[ERROR] Failed to execute goal on project hbase-thrift: Could not resolve dependencies for project org.apache.hbase:hbase-thrift:jar:1.2.3: Could not find artifact jdk.tools:jdk.tools:jar:1.8 at specified path C:\java\jre1.8.0_111/../lib/tools.jar -&gt; [Help 1]

成功後如下圖所示:

編譯hbase-1.2.3源代碼 目錄 1. 約定 2. 安裝jdk 3. 安裝maven 4. 網絡配置 5. 從hbase官網下載下傳源代碼包: 6. eclipse導入hbase源代碼 7. 編譯hbase-thrift 8. Problems opening an editor ... does not exist 9. hbase-common

在目錄E:\bigdata\hbase-1.2.3-src\hbase-thrift\target下可以看到編譯生成的jar檔案:

編譯hbase-1.2.3源代碼 目錄 1. 約定 2. 安裝jdk 3. 安裝maven 4. 網絡配置 5. 從hbase官網下載下傳源代碼包: 6. eclipse導入hbase源代碼 7. 編譯hbase-thrift 8. Problems opening an editor ... does not exist 9. hbase-common

建議從國内鏡像安裝cgywin,會快很多,可用鏡像:

<a href="http://mirrors.163.com/cygwin/">http://mirrors.163.com/cygwin/</a>

<a href="http://www.cygwin.cn/pub/">http://www.cygwin.cn/pub/</a>

選擇從網際網路安裝,在“User URL”處輸入國内鏡像網址。

編譯hbase-1.2.3源代碼 目錄 1. 約定 2. 安裝jdk 3. 安裝maven 4. 網絡配置 5. 從hbase官網下載下傳源代碼包: 6. eclipse導入hbase源代碼 7. 編譯hbase-thrift 8. Problems opening an editor ... does not exist 9. hbase-common

安裝好cygwin後,需将cgywin的bin目錄加入到環境變量PATH中,并需要重新開機eclipse才會生效。如果未安裝bash,則用同樣方法編譯hadoop-common時,會報如下錯誤:

[ERROR] Failed to execute goal org.apache.maven.plugins:maven-antrun-plugin:1.6:run (generate) on project hbase-common: An Ant BuildException has occured: Execute failed: java.io.IOException: Cannot run program "bash": CreateProcess error=2, 系統找不到指定的檔案。 -&gt; [Help 1]

在eclipse裡用F3想進入某個類的某方法時,提示以下錯誤(Problems opening an editor Reason: [項目名] does not exist):

編譯hbase-1.2.3源代碼 目錄 1. 約定 2. 安裝jdk 3. 安裝maven 4. 網絡配置 5. 從hbase官網下載下傳源代碼包: 6. eclipse導入hbase源代碼 7. 編譯hbase-thrift 8. Problems opening an editor ... does not exist 9. hbase-common

解決辦法(目的是生成“.project”和“.classpath”兩個eclipse需要的檔案):

按下圖所示,進入項目的根目錄,以hbase的hbase-thrift為例,如hbase-thrift所在目錄為E:\bigdata\hbase-1.2.3-src\hbase-thrift,注意不是E:\bigdata\hbase-1.2.3-src,然後執行:mvn eclipse:eclipse,成功後重新開機eclipse上述問題即解決(mvn eclipse:eclipse的作用是将maven項目轉化為eclipse項目,即生成兩個eclipse導入所需的配置檔案,并無其他改變,也就是生成eclipse需要的.project和.classpath兩個檔案):

編譯hbase-1.2.3源代碼 目錄 1. 約定 2. 安裝jdk 3. 安裝maven 4. 網絡配置 5. 從hbase官網下載下傳源代碼包: 6. eclipse導入hbase源代碼 7. 編譯hbase-thrift 8. Problems opening an editor ... does not exist 9. hbase-common

其它諸于hbase-client、hbase-common、h base-server等同樣處理即可。

編譯hbase-common如遇到下述問題:

[ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:2.5.1:compile (default-compile) on project hbase-common: Compilation failure: Compilation failure:

[ERROR] E:\bigdata\hbase-1.2.3-src\hbase-common\target\generated-sources\java\org\apache\hadoop\hbase\package-info.java:[5,39] 錯誤: 非法轉義符

[ERROR] E:\bigdata\hbase-1.2.3-src\hbase-common\target\generated-sources\java\org\apache\hadoop\hbase\package-info.java:[5,30] 錯誤: 未結束的字元串文字

[ERROR] E:\bigdata\hbase-1.2.3-src\hbase-common\target\generated-sources\java\org\apache\hadoop\hbase\package-info.java:[6,0] 錯誤: 需要class, interface或enum

[ERROR] E:\bigdata\hbase-1.2.3-src\hbase-common\target\generated-sources\java\org\apache\hadoop\hbase\package-info.java:[6,9] 錯誤: 需要class, interface或enum

[ERROR] -&gt; [Help 1]

打開package-info.java:

/*

 * Generated by src/saveVersion.sh

 */

@VersionAnnotation(version="1.2.3", revision="Unknown",

                         user="mooon\mike

", date="Tue Oct 25 18:02:39     2016", url="file:///cygdrive/e/bigdata/hbase-1.2.3-src",

                         srcChecksum="88f3dc17f75ffda6176faa649593b54e")

package org.apache.hadoop.hbase;

,可以看到問題出在“mike”後多了一個換行符,正常應當是:

                         user="mooon\mike", date="Tue Oct 25 18:02:39     2016", url="file:///cygdrive/e/bigdata/hbase-1.2.3-src",

檢視hadoop-common的saveVersion.sh,部分内容如下:

unset LANG

unset LC_CTYPE

version=$1

outputDirectory=$2

pushd .

cd ..

user=`whoami`

date=`date`

cwd=`pwd`

問題就出在whoami指令傳回了mooon\mike,并且mike後跟了一個換行符導緻的,是以可以如下消滅多餘的換行符:

user=`whoami|awk '{printf("%s",$1);}'`

再次編譯,仍然報錯:

[ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:2.5.1:compile (default-compile) on project hbase-common: Compilation failure

再次打開package-info.java:

                         user="mooon\mike", date="Tue Oct 25 17:59:21     2016", url="file:///cygdrive/e/bigdata/hbase-1.2.3-src",

問題出在“mooon\mike”間的斜杠,需要将單個斜杠改成雙斜杠“mooon\\mike”或者幹脆去掉“mooon\”僅保留“mike”也可以。

再次修改saveVersion.sh,直接寫死user:

user=mike

然後再次編譯hadoop-common,終于成功了:

繼續閱讀