本地通过的构建在 Travis 上失败

Build that passes locally fails on Travis

最近我一直在尝试更多地了解持续集成的方法,并选择了 Travis CI 来完成这项工作。但是,在我使用 Java 和 Kotlin 的项目之一中,我的本地构建通过了,但在 Travis 上失败了。

我一直无法理解我收到的有关构建失败原因的错误消息。 kotlin-maven-plugin 似乎是错误的根源。在构建日志中看到的有问题的命令是 mvn install -DskipTests=true -Dmaven.javadoc.skip=true -B -V。 我在本地 运行 这个命令没有错误并且构建成功。

这是来自 CI 构建作业的堆栈跟踪的相关片段:

[INFO] --- kotlin-maven-plugin:1.4.32:compile (compile) @ BytesToJava ---
[ERROR] java.lang.ExceptionInInitializerError
    at com.intellij.pom.java.LanguageLevel.<clinit>(LanguageLevel.java:25)
    at com.intellij.core.CoreLanguageLevelProjectExtension.<init>(CoreLanguageLevelProjectExtension.java:26)
    at com.intellij.core.JavaCoreProjectEnvironment.<init>(JavaCoreProjectEnvironment.java:42)
    at org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreProjectEnvironment.<init>(KotlinCoreProjectEnvironment.kt:26)
    at org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreEnvironment$ProjectEnvironment.<init>(KotlinCoreEnvironment.kt:121)
    at org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreEnvironment$Companion.createForProduction(KotlinCoreEnvironment.kt:425)

希望获得一些资源甚至相关问题线程。提前致谢:)

Travis Build Logs

问题是由非法反射操作和 Kotlin Maven 插件引起的,任何超过 Java 9 的项目(我的项目使用 Java 15)。正如 YouTrack 上的 this thread 所述,解决方法是:

A workaround is to run mvn with the following environment variable: MAVEN_OPTS=--illegal-access=permit

向我的 .travis.yml 添加具有相同值的全局环境变量解决了问题。