用於jdk8中OpenJFX的編譯
Gradle
設定代理
windows/linux下.gradle/下init.gradle gradle.properties init.gradle 這個檔案就是用來配倉庫的,一個不行換一個
allprojects{
repositories{
maven{
url 'http://maven.aliyun.com/nexus/content/groups/public/'
//credentials{
// username 'anonymous'
// password 'devcloud'
//}
}
//mavenCentral()
//maven { url "http://oss.sonatype.org/content/repositories/snapshots" }
//maven { url "https://jitpack.io" }
}
}
複製程式碼
gradle.properties 這個檔案就是加代理的
systemProp.http.proxyHost=proxy.neusoft.com
systemProp.http.proxyPort=8080
systemProp.http.proxyUser=
systemProp.http.proxyPassword=
systemProp.http.nonProxyHosts=localhost
systemProp.https.proxyHost=proxy.neusoft.com
systemProp.https.proxyPort=8080
systemProp.https.proxyUser=
systemProp.https.proxyPassword=
systemProp.https.nonProxyHosts=localhost
複製程式碼
jcenter庫
jcenter()有時候不好使,需要換成maven { url "jcenter.bintray.com"}或者maven { url "maven.aliyun.com/nexus/conte…"}
報錯沒有認證
cause: unable to find valid certification path to requested target
這個問題應該是沒有證照,報錯的url開啟,獲取證照,匯入idea的jre以及系統jdk的jre中
keytool -import -alias abc -keystore cacerts -file D://abc.cer
複製程式碼
編譯的依賴問題
- idea啟動必須有jre,windows版本自帶jre,但是linux沒有jre,所以需要安裝的jdk中自帶jre,如果使用openjdk沒有jre,需要手動自己安裝jre方可啟動
- 上外網需要代理的情況下,想啟用idea需要在system settings設定代理,並且在jre中匯入證照
- gradle專案編譯需要jdk,需要檢視當前使用的哪個jdk,idea中可以對每個專案單獨指定jdk,但是終端中用gradle命令的話,需要檢視系統JDK是哪個
openjfx
github上openjfx11的專案地址
openjfx用gradle進行編譯
Windows平臺編譯遇到的問題
報錯
原因:使用openjdk中缺少ant-javafx.jar和javafx-mx.jar這兩個jar,oracle jdk中有,需要從oracle中拷貝出來
link報錯
因為cygwin中有一個link.exe,而vs2017中也有一個link.exe,需要用vs2017的link, 解決方案:
- cmd中進行編譯
- 編譯需要link.exe的地方使用全路徑
- 環境變數中將vs的環境變數前置於cygwin64中
cvtres.exe找不到
這個是vs2017中的可執行程式,需要將vs的環境變數加入path中 vs中環境變數是bin\HostX64\x64/bin\HostX86\x86這樣的路徑
error LNK2038: mismatch detected for 'RuntimeLibrary'
這個錯是因為link的時候檢查不一致導致的,編譯出來的obj檔案中加入了靜態庫libcpmt.lib,而生成dll需要加入一個動態庫msvcprt.lib參考連結
分析檢查發現加在編譯obj的時候加入了選項-D_STATIC_CPPLIB -D_DISABLE_DEPRECATE_STATIC_CPPLIB
而加入這個選項是因為Makefile中VS_VER等於100導致的,即visual studio版本是100,但是實際電腦裝的是vs2017,應該是VS_VER=150,分析發現在build/windows_tools.properties中的VS_VER=100
再分析windows_tools.properties生成的命令,發現執行一個bat指令碼不存在,最後只能設定為100
通過修改生成指令碼使得VS_VER=150
CMake Error: Could not create named generator Visual Studio 15 2017 win64
這個原因是cmake導致的,和前面類似,cygwin中有一個cmake,但是這個cmake不能用於windows上編譯openjfx,需要改用windows上的cmake,且cmake的版本不能太低,我選用的的cmake3.12.3,cmake的bin目錄加入path環境變數,且需要在cygwin的bin目錄之前
這樣修改發現還是有錯誤
多次嘗試發現是在呼叫build.gradle命令
commandLine("perl", "$projectDir/src/main/native/Tools/Scripts/build-webkit",
"--java", "--icu-unicode", targetCpuBitDepthSwitch,
"--cmakeargs=${cmakeArgs}")
複製程式碼
出錯 整句話呼叫的是build-webkit這個命令,開啟這個檔案看到第一句話
#!/usr/bin/env perl
複製程式碼
說明這個是需要perl支援,是一個bash指令碼,所以需要用的是cygwin中的perl,再看環境變數,發現有人在c盤中加入了per64\bin這樣的環境變數,因此呼叫的並非cygwin中的perl,所以編譯不成功
刪除了per64\bin的環境變數編譯成功
做單元測試fxpackager:test的時候有6個fail
- 對比oracle的測試結果,發現沒有fail
- 分析發現在oracle jdk中有jre/bin/下有vcruntime140.dll msvcp140.dll這兩個dll檔案,這兩個檔案在執行測試用例時會拷貝到build目錄下,因我司JDK中並無這兩個dll,所以編譯不通過
- 考慮是編譯windows版本Jdk還是windows版本的openjfx導致沒有生成這個兩個dll