用于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