当我尝试gradlew 构建
我的项目时,我收到来自compileKotlin
任务的错误消息:
F:\IdeaProjects\walp.tinykotlintest>gradlew build
:compileKotlin
...
Only the Kotlin standard library is allowed to use the 'kotlin' package
...
BUILD FAILED
Total time: 6.214 secs
发生这种情况是因为我在包中声明了一个以以下内容开头的类:kotlin
...
有没有办法通过配置我的 build.gradle
脚本来禁用此检查?
编辑:我确信如果我使用裸 kotlin 编译器编译这是可能的... here is an example使用 kotlin 编译器编译 kotlin 包中的类...所以我认为应该有一种方法可以在 gradle 中完成它!....我希望...
到目前为止我尝试了什么:
我尝试通过配置 KotlinCompile 任务来配置
gradle.build
:import org.jetbrains.kotlin.gradle.tasks.KotlinCompile tasks.withType(KotlinCompile) { it.kotlinOptions.allowKotlinPackage = true }
gradle 脚本在这些更改下运行良好... but it seems like this is getting ignored ...我仍然遇到错误。
我尝试子类化
KotlinCompile
类并覆盖它的beforeCompileHook()
并用我的版本替换现有的compileKotlin
任务:import org.jetbrains.kotlin.cli.common.arguments.K2JVMCompilerArguments import org.jetbrains.kotlin.gradle.tasks.KotlinCompile class MyKotlinCompile extends KotlinCompile { @Override public void beforeCompileHook(K2JVMCompilerArguments args) { args.allowKotlinPackage = true throw new RuntimeException("HELLO") // added to see if hook is run } } tasks.create(name: "compileKotlin", type: MyKotlinCompile, overwrite: true)
Studying the source code...I was fairly certain this would work但显然没有。我尝试过抛出和不抛出
RuntimeException
但当我再次尝试gradle build
时,我总是收到以下错误:F:\IdeaProjects\walp.tinykotlintest>gradlew build --stacktrace :compileKotlin UP-TO-DATE :compileJava UP-TO-DATE :processResources UP-TO-DATE :classes UP-TO-DATE :jar UP-TO-DATE :sourcesJar UP-TO-DATE :assemble UP-TO-DATE :compileTestKotlin FAILED FAILURE: Build failed with an exception. * What went wrong: Execution failed for task ':compileTestKotlin'. > java.lang.NullPointerException (no error message) * Try: Run with --info or --debug option to get more log output. * Exception is: org.gradle.api.tasks.TaskExecutionException: Execution failed for task ':compileTestKotlin'. at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions(ExecuteActionsTaskExecuter.java:69) at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.execute(ExecuteActionsTaskExecuter.java:46) . . . at org.gradle.wrapper.WrapperExecutor.execute(WrapperExecutor.java:129) at org.gradle.wrapper.GradleWrapperMain.main(GradleWrapperMain.java:61) Caused by: java.lang.NullPointerException at org.jetbrains.kotlin.gradle.tasks.KotlinCompile$populateTargetSpecificArgs$2.invoke(Tasks.kt:215) at org.jetbrains.kotlin.gradle.tasks.KotlinCompile.populateTargetSpecificArgs(Tasks.kt:222) at org.jetbrains.kotlin.gradle.tasks.KotlinCompile.populateTargetSpecificArgs(Tasks.kt:148) at org.jetbrains.kotlin.gradle.tasks.AbstractKotlinCompile.execute(Tasks.kt:105) at org.gradle.internal.reflect.JavaMethod.invoke(JavaMethod.java:75) at org.gradle.api.internal.project.taskfactory.AnnotationProcessingTaskFactory$IncrementalTaskAction.doExecute(AnnotationProcessingTaskFactory.java:243) at org.gradle.api.internal.project.taskfactory.AnnotationProcessingTaskFactory$StandardTaskAction.execute(AnnotationProcessingTaskFactory.java:219) at org.gradle.api.internal.project.taskfactory.AnnotationProcessingTaskFactory$IncrementalTaskAction.execute(AnnotationProcessingTaskFactory.java:230) at org.gradle.api.internal.project.taskfactory.AnnotationProcessingTaskFactory$StandardTaskAction.execute(AnnotationProcessingTaskFactory.java:208) at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeAction(ExecuteActionsTaskExecuter.java:80) at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions(ExecuteActionsTaskExecuter.java:61) ... 60 more
无论如何我可能不应该这样做...但我真的很想尝试一下。
谢谢!
最佳答案
如果 Kotlin 标准库与您正在使用的 JVM 不兼容,听起来您实际上应该做的是 fork Kotlin,进行与 JVM 兼容所需的更改,然后使用标准 Maven build script建立你的 fork 。该脚本已经提供了允许编译 kotlin
包中的文件的选项。
关于gradle - 在 Gradle 中禁用对使用 'kotlin' 包的检查,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38811106/