【问题标题】:`assert` is a keyword, compiling with Gradle`assert` 是关键字,用 Gradle 编译
【发布时间】:2018-12-17 08:19:49
【问题描述】:

我正在用 Gradle 编译一个 Java 项目。当我运行gradle build 时,我得到:

任务:编译Java失败 /home/mvh/projects/research/DPM/src/main/java/DPM/bandera/Bandera.java:102:错误:从 1.4 版开始,'assert' 是关键字,不能用作标识符 公共静态无效断言(布尔表达式){ ^ (使用 -source 1.3 或更低版本以使用 'assert' 作为标识符) 1 个错误

显然,当使用 javac 编译时,解决方案是根据错误消息添加参数 -source 1.3。所以我尝试在gradle中添加这个参数如下:

compileJava {
    options.compilerArgs << '-ea'
}

我还尝试用enableassertions-enableassertionsea 代替-ea

我也试过这个:

test {
    enableAssertions = true
}

也无济于事。如何让我的 gradle 构建文件在编译我的项目时启用断言?谢谢!

【问题讨论】:

  • 不行,解决办法是修改你的源代码,不使用assert作为标识符。
  • 我同意安德烈亚斯的观点。您的代码有问题,而不是 gradle。解决真正的问题,而不是解决症状。不,用 java 1.3 级别编译......这就像一个非常非常非常糟糕的主意。真的。
  • 我很困惑。如果您使用-source 1.3 编译,即模拟不存在断言的旧代码,您为什么要尝试运行启用断言的代码?如果代码在没有断言的情况下编译,那么启用断言有什么意义?
  • @Andreas 我认为用 1.3 编译并不是一个好主意,我只是尝试过,因为错误消息似乎表明我应该这样做。我对 gradle 或 Java 不是很了解,对建议很开放。
  • @MaxvonHippel 那么这是错误信息的重要部分:"'assert'是关键字,不能用作标识符",表示你需要编辑您的源代码并停止使用assert 作为方法名称。

标签: java gradle javac assertion


【解决方案1】:

你试过了吗?

compileJava {
    options.compilerArgs << '-source 1.3'
}

我必须警告你,这样你会失去所有“现代”语言特性(如泛型)。

PS: 正确的解决方案是在类Bandera 中重命名assert 方法。

编辑 设置此标志的正确方法是

compileJava {
    sourceCompatibility = 1.3
}

重命名方法是解决此问题的更好方法。

【讨论】:

  • 这不是“警告”,而是“不行”的简单指示。不过,理论上它可以解决问题,所以请为创造力投票 ;-)
  • @GhostCat 是的,但是如果 OP 想要它我该怎么办?
  • 我知道,我们只分发散弹枪。人们瞄准那个东西,而不是我们的问题。
  • 这对我不起作用:> * 出了什么问题:任务 ':compileJava' 执行失败。 > 无效标志:-source 1.3
  • 我可以改变 Bandera,这是个好主意。如果可能的话,我明天试试。
猜你喜欢
  • 1970-01-01
  • 2011-03-02
  • 2011-06-27
  • 2011-04-07
  • 1970-01-01
  • 1970-01-01
  • 2015-07-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多