使用 gradle 构建 Cordova 项目时覆盖 Java 版本

Posted

技术标签:

【中文标题】使用 gradle 构建 Cordova 项目时覆盖 Java 版本【英文标题】:Override Java version when building a Cordova project with gradle 【发布时间】:2015-06-05 19:49:43 【问题描述】:

我正在尝试使用 gradle 作为构建工具来构建 Cordova 项目。在 Cordova 项目中,我有自己的插件,需要 Java 1.7。

在 Cordova 附带的 build.gradle 中,java 版本是 1.6。 build.gradle:

android 
    compileOptions 
        sourceCompatibility JavaVersion.VERSION_1_6
        targetCompatibility JavaVersion.VERSION_1_6
    

build.gradle 带有一个很大的警告,说它是一个不应编辑的生成文件,自定义 gradle 构建步骤的方法是 - 据我了解 - 创建一个 build-extras.gradle 文件。

我创建了一个 build-extras.gradle 文件并尝试了以下操作:

android 
    compileOptions 
        sourceCompatibility JavaVersion.VERSION_1_7
        targetCompatibility JavaVersion.VERSION_1_7
    

但它似乎不起作用。我在构建项目时仍然遇到错误。

错误:

> strings in switch are not supported in -source 1.6
>         switch (action) 
>                 ^   (use -source 7 or higher to enable strings in switch)

有人可以帮我弄清楚如何设置 gradle 来完成这项工作吗?

【问题讨论】:

【参考方案1】:

我一直在尝试解决同样的问题,并来到这里希望找到答案!无论如何,虽然没有答案,但您对build-extras.gradle 的提及让我走上了正轨,以下内容现在对我有用……所以谢谢。

首先,我想我不妨尝试使用与您相同的语法,以便尝试找出问题所在。据我所知,它失败了,因为build-extras.gradle 文件没有神奇地合并到build.gradle,而是使用Gradle apply from 方法加载和执行。而且由于这发生在 android 关闭之前,所以这个过程还为时过早,那些 android 值会覆盖我们的“额外”值。

(我没有时间深入研究 Gradle 或 Groovy,如果我的术语不准确,敬请见谅......)

但是,如果我使用 postBuildExtras() 方法,我可以让它工作。

如果您查看由 Cordova 生成的 build.gradle 文件的底部,您会看到如果 ext 上存在这样的方法(即 postBuildExtras),那么它就会被调用。由于这是配置脚本中的最后一件事,所以我猜这个方法的重点是我们可以用它来覆盖任何东西。

因此,我最终将其作为我的build-extras.gradle

ext.postBuildExtras = 
    android 
        compileOptions 
            sourceCompatibility JavaVersion.VERSION_1_7
            targetCompatibility JavaVersion.VERSION_1_7
        
    

实际上,我在调查的早期就进行了这项工作,但我一直在尝试其他方法,因为我怀疑当我们尝试拥有多个 build-extras.gradle 文件时,这种技术会失败 - 鉴于我们都在专门讨论 Cordova 插件,很有可能。

有一种技术看起来对插件很有前途,那就是在plugin.xml 中使用<framework> 元素,但是使用这种方法,我永远无法加载/导入/任何插件特定的模块。当我进入插件 #2 时,我会再看一下这个,但是现在上面描述的技术让我在今天早上的位置上有了很大的飞跃,所以再次感谢build-extras.gradle 的线索。 ;)

【讨论】:

【参考方案2】:

关于 Mark 的回答,我找到了将 build-extras.gradle 添加到 plugin.xml 文件中的解决方案。所以它会自动添加到平台文件夹的正确位置。

<source-file src="src/android/lib/build-extras.gradle" target-dir="src/.." />

【讨论】:

【参考方案3】:

已找到并更新了下一行。

compileOptions 
        sourceCompatibility JavaVersion.VERSION_1_6
        targetCompatibility JavaVersion.VERSION_1_6
     

compileOptions 
        sourceCompatibility JavaVersion.VERSION_1_7
        targetCompatibility JavaVersion.VERSION_1_7
    

重点是更改位于下一个文件夹\platforms\android\ 中的 build.gradle 文件,但请记住,还有其他带有其他路径的 build.gradle 文件。

【讨论】:

以上是关于使用 gradle 构建 Cordova 项目时覆盖 Java 版本的主要内容,如果未能解决你的问题,请参考以下文章

ionic2常见问题——cordova使用Gradle构建下载maven太慢,使用阿里云镜像

Cordova 在 gradle-wrapper.properties 文件中构建更改 distributionUrl

Ionic Cordova 使用 Gradle 构建 Android 错误并且构建失败 [重复]

在cordova中自动gradle下载而不是本地gradle

cordova使用Gradle构建下载maven太慢,使用阿里云镜像

Gradle distributionUrl 使用“ionic cordova run android”更改为旧版本,构建失败