我们有用 Groovy 编写的 JUnit 测试,并且大多数方法标识符都包含句点。这是一个例子:
\n\nimport org.junit.Assert\nimport org.junit.Test\n\nclass MethodNameTest {\n\n @Test\n void "test with ... dots "() {\n Assert.assertTrue(false);\n }\n}\nRun Code Online (Sandbox Code Playgroud)\n\n这是使用 groovy 2.4.15 和 JDK 8 运行的。但是,更新到 JDK 11 后,我们现在遇到“非法方法名称”错误:
\n\nException 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)\nRun 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