1. 背景
更換Mac M1後,發現無法編譯Hadoop2.6.0了,本文總結了Mac基于Idea編譯Hadoop2.6.0的難點及解決辦法。
2. 下載下傳JDK7并配置
https://www.oracle.com/in/java/technologies/javase/javase7-archive-downloads.html

為了防止出現
Exception in thread “main” java.lang.AssertionError: Missing tools.jar at: /Library/Java/JavaVirtualMachines/jdk1.7.0_80.jdk/Contents/Home/Classes/classes.jar. Expression: file.exists()
報錯,在安裝後,增加一個軟連結:
mkdir /Library/Java/JavaVirtualMachines/jdk1.7.0_80.jdk/Contents/Home/Classes
ln -s /Library/Java/JavaVirtualMachines/jdk1.7.0_80.jdk/Contents/Home/lib/tools.jar /Library/Java/JavaVirtualMachines/jdk1.7.0_80.jdk/Contents/Home/Classes/classes.jar
3. 安裝protoc 2.5.0
下載下傳:
https://github.com/protocolbuffers/protobuf/releases/tag/v2.5.0
解壓後,在
src/google/protobuf/stubs/platform_macros.h
檔案中,增加arm晶片相關配置:
找到以下代碼:
#else
#error Host architecture was not detected as supported by protobuf
在上面增加:
#elif defined(__arm64__)
#define GOOGLE_PROTOBUF_ARCH_ARM 1
#define GOOGLE_PROTOBUF_ARCH_64_BIT 1
效果如下所示:
在編譯安裝前,如果已經安裝protoc3,修改protoc指令名,以免被覆寫:
mv /usr/local/bin/protoc /usr/local/bin/protoc3
安裝protoc2.5.0:
./configure
make
make check
make install
安裝後,檢查版本:
protoc --version
4. hadoop pom增加依賴
<dependency>
<groupId>jdk.tools</groupId>
<artifactId>jdk.tools</artifactId>
<version>1.7</version>
<scope>system</scope>
<systemPath>/Library/Java/JavaVirtualMachines/jdk1.8.0_321.jdk/Contents/Home/lib/tools.jar</systemPath>
</dependency>