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

17

我正在尝试使用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使其工作吗?

3个回答

18

我一直在尝试解决同样的问题,来这里希望找到答案!虽然没有答案,但是你提到的build-extras.gradle让我找到了正确的方向,现在我的问题已经得到解决...谢谢。

一开始,我想尝试使用与你相同的语法,以便找出问题所在。据我所知,它失败是因为build-extras.gradle文件并没有神奇地合并到build.gradle中,而是使用Gradle的apply from方法加载和执行。并且由于这发生在android闭包之前,所以它太早了,在这个过程中android值会覆盖我们的'extra'值。

(我没有时间深入研究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>元素,但是采用这种方法,我无法使插件特定的模块加载/导入/执行任何操作。等到我开始处理第二个插件时,我会再次查看这个问题,但目前上述描述的技术比我今天早上所处的位置更进了一大步,所以再次感谢build-extras.gradle的线索。 ;)


6

关于Mark的答案,我得到了一个解决方案,可以将build-extras.gradle添加到plugin.xml文件中。这样它就会自动添加到正确的位置的平台文件夹中。

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

0

已找到并更新下一行。

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文件。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接