cordova 9.0 构建时提示Requirements check failed for JDK 8 如何解决

祖国大地经济复苏,全国各族人民都积极投入到了复产任务。作为码农的我也紧张了一大段时间,最近在忙几个项目,其中有个app,需要快速搭建预览和测试,于是就直接上了cordova,没想到踩到雷了。

搭建项目没什么问题,只是构建的时候给我来了这么一段:

Requirements check failed for JDK 8 ('1.8.*')! Detected version:11.0.7

Check your ANDROID_SDK_ROOT / JAVA_HOME / PATH environment variables.

提示很明确了,本机jdk11不符合cordova的必需jdk8。原因也清楚,因为前一阵本机环境从jdk8升级到了jdk11。

现在的问题是,我不想再将java_home换回8,因为本机所有项目编译版本都全部更改成了jdk11,如果改回去,没半天时间改不完。(还有很多Eclipse里的历史项目)

我使用的cordova@9.0.0,这个版本是一年前发布的,但是npm里最新的cordova10,还处于nightly版(每日编译版),连rc都不是,明显在生产环境下是不建议用的。也就是说,cordova9是最新稳定版,我不能寄希望于升级cordova改变现状。

另外尝试过在IDE(vscode)里设置java.home,不过没用,这个设置只针对vsc的java插件有效,对cordova无能为力。

想来想去,如果不能让cordova屈服,我就只能面临回退到jdk8的厄运。

因为cordova基于的nodejs,突然想到,所有的提示都应该存在于明文代码。于是一狠心,全项目搜索关键字Requirements check failed for。

还真就检索到了:

位于platforms/android/cordova/lib/check_reqs.js文件里的module.exports.run方法里,相关的有且仅有一处!

它的判断是这样的:

// Returns a promise.
module.exports.run = function () {
    return Q.all([this.check_java(), this.check_android()]).then(function (values) {
        console.log('Checking Java JDK and Android SDK versions');
        console.log('ANDROID_SDK_ROOT=' + process.env['ANDROID_SDK_ROOT'] + ' (recommended setting)');
        console.log('ANDROID_HOME=' + process.env['ANDROID_HOME'] + ' (DEPRECATED)');

        if (!String(values[0]).startsWith('1.8.')) {
            throw new CordovaError(
                'Requirements check failed for JDK 8 (\'1.8.*\')! Detected version: ' + values[0] + '\n' +
                'Check your ANDROID_SDK_ROOT / JAVA_HOME / PATH environment variables.'
            );
        }

        if (!values[1]) {
            throw new CordovaError('Requirements check failed for Android SDK! Android SDK was not detected.');
        }
    });
};

看到了这个1.8的判断条件,同时根据check_java方法也可以明确为判断java环境。于是把“1.8.”直接改成了“11.”,再次编译顺利通过。

后记:

首先我是不推荐任意更改依赖框架源码的,这样不但会影响框架后续更新,也会造成一些未知异常。但没办法,此处仅作为临时解决方案。

我不清楚cordova9是否有只依赖jdk8的关键部分,我也不清楚jdk11会对cordova9造成什么影响,但是我想的很清楚,不管如何要让影响降低到最小,改一处代码,这个影响就真的很小。

展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 大白 设计师: CSDN官方博客
应支付0元
点击重新获取
扫码支付

支付成功即可阅读