Groovy 方法名称(java.lang.ClassFormatError:非法方法名称)

byu*_*yuu 7 java groovy

我们有用 Groovy 编写的 JUnit 测试,并且大多数方法标识符都包含句点。这是一个例子:

\n\n
import org.junit.Assert\nimport org.junit.Test\n\nclass MethodNameTest {\n\n    @Test\n    void "test with ... dots "() {\n        Assert.assertTrue(false);\n    }\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

这是使用 groovy 2.4.15 和 JDK 8 运行的。但是,更新到 JDK 11 后,我们现在遇到“非法方法名称”错误:

\n\n
Exception in thread "main" java.lang.ClassFormatError: Illegal method name "test with ... dots " in class MethodNameTest\n    at java.base/java.lang.ClassLoader.defineClass1(Native Method)\n    at java.base/java.lang.ClassLoader.defineClass(ClassLoader.java:1016)\n    at java.base/java.security.SecureClassLoader.defineClass(SecureClassLoader.java:174)\n
Run Code Online (Sandbox Code Playgroud)\n\n

我们还尝试将 groovy 更新到 2.5.9,但仍然出现此错误。使用jdk 11时有什么办法解决这个问题吗?

\n\n

我们已经读到,点字符不在有效的 java 标识符列表中(根据\xc2\xa73.8),但我们想知道为什么 groovy 可以在 JDK 8 上支持它,但不能在 JDK 11 上支持它。我们可以修改测试适应,但如果有人能解释这种情况如何以及为何发生,我们将不胜感激。

\n\n

谢谢!

\n\n

编辑\n我正在通过 Intellij IDEA 运行测试。我们有一个使用 groovy 作为依赖项的 gradle 项目。

\n