背景:雖然之前在win10上成功編譯了flink-1.9.2以運行在cdh6.3.0環境中:
參考一:從源碼編譯Apache Flink快速部署和測試(包含指定Hadoop及Cloudera Hadoop、Blink)
參考二:flink 1.9 編譯
但爲了體驗在1.9.x的基礎上修復了的基於 Flink SQL 構建流式應用,現進行“win10上編譯flink1.10.0以運行在cdh6.3.0環境中”。
首先,在https://github.com/apache/flink/releases處點擊下載flink-release-1.10.0.tar包,雖然idea自帶了maven3.3.9(位置:D:\Application\Java\IDEA2018.1\plugins\maven\lib\maven3\conf\settings.xml)但爲了避免maven編譯出現意外,於是毅然決然地在win10上自行安裝了apache-maven-3.5.4並配置阿里源
雖然阿里源https://maven.aliyun.com/mvn/view可以看到網友普遍使用的下面的庫:
<mirror>
<id>alimaven</id>
<mirrorOf>central</mirrorOf>
<name>aliyun maven</name>
<url>https://maven.aliyun.com/repository/central</url>
</mirror>
但我使用的下面庫:
<mirror>
<id>nexus-aliyun</id>
<mirrorOf>central</mirrorOf>
<name>Nexus aliyun</name>
<url>http://maven.aliyun.com/nexus/content/groups/public</url>
</mirror>
<!--
<mirror>
<id>cloudera</id>
<name>cloudera</name>
<url>https://repository.cloudera.com/artifactory/cloudera-repos</url>
<mirrorOf>*,!mapr-releases,!confluent</mirrorOf>
</mirror>-->
<mirror>
<id>nexus-aliyun-apache</id>
<mirrorOf>central</mirrorOf>
<name>Nexus aliyun apache</name>
<url>http://maven.aliyun.com/nexus/content/repositories/apache-snapshots/</url>
</mirror>
<mirror>
<id>nexus-aliyun</id>
<mirrorOf>*,!jeecg,!jeecg-snapshots,!mapr-releases</mirrorOf>
<name>Nexus aliyun</name>
<url>http://maven.aliyun.com/nexus/content/groups/public</url>
</mirror>
<mirror>
<id>mapr-public</id>
<mirrorOf>mapr-releases</mirrorOf>
<name>mapr-releases</name>
<url>https://maven.aliyun.com/repository/mapr-public</url>
</mirror>
若使用之前編譯flink1.9.x的編譯命令卻報錯:
mvn -T4C clean install -DskipTests -Pvendor-repos -Dhadoop.version=3.0.0-cdh6.3.0 -Dflink.shaded.version=7.0 -Dscala-2.11 -Drat.skip=true(避免docs問題,見文末的“補充”說明)
發現報錯信息顯示:
Failure to find org.apache.flink:flink-shaded-jackson:jar:2.10.1-7.0 in https://repository.cloudera.com/artifactory/cloudera-repos was cached in the local repository
於是嘗試使用最原始的編譯命令報錯:flink-hadoop-fs模塊找不到flink-shaded-hadoop-2:jar:3.0.0-cdh6.3.0
mvn -T4C clean install -DskipTests -Pvendor-repos -Dhadoop.version=3.0.0-cdh6.3.0 -Dscala-2.11 -Drat.skip=true
經查mvnrepository倉庫,從此鏈接處可以發現編譯flink-1.10.x需要flink-shaded-10.0或9.0,而不是編譯flink-1.9.x時需要的flink-shaded-8.0或7.0。而我並未找到flink官方編譯對此的描述:
於是下載flink-shaded-release-10.0.tar併成功編譯:
mvn clean install -DskipTests -Drat.skip=true -Pvendor-repos -Dhadoop.version=3.0.0-cdh6.3.0
於是,win10上本地maven倉庫中就有了flink-1.10.0所需要的flink-shaded的依賴項,如下圖所示:
然後,再編譯flink-1.10.0報錯:flink-yarn和flink-yarn-tests兩個模塊的測試類均報錯但報錯並不都是newInstance方法中參數列表問題。
解決方案爲在兩模塊pom.xml文件中添加:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.0</version>
<configuration>
<source>${java.version}</source>
<target>${java.version}</target>
<!-- 略過測試代碼的編譯 -->
<skip>true</skip>
<!-- The semantics of this option are reversed, see MCOMPILER-209. -->
<useIncrementalCompilation>false</useIncrementalCompilation>
<compilerArgs>
<!-- Prevents recompilation due to missing package-info.class, see MCOMPILER-205 -->
<arg>-Xpkginfo:always</arg>
</compilerArgs>
</configuration>
</plugin>
即如下圖所示:
最後依然使用上面的編譯命令成功編譯flink-1.10.0源碼至hadoop3.0.0-cdh6.3.0,如下圖:
補充:文首所提到的編譯命令中“避免docs問題”在之前編譯flink-1.9.0時的問題描述如下:
若編譯命令中不加-Drat.skip=true參數,即使註釋掉報錯的flink-docs子模塊依然報錯相同,如下圖所示:
經查“參考二”文中,發現若不註釋掉pom中任何一個模塊,可通過編譯命令中添加“-Drat.skip=true”避免docs報錯問題。但“參考二”的評論區中,我所提到的flink-1.9.0編譯時1/3日誌處比較隱蔽的HUSKY SKIP INSTALL報錯問題在win10上無法解決,可能需要linux環境下編譯才能避免。