禁用在Gradle中使用'kotlin'包检查

当我尝试gradlew build我的项目时,我收到了一个来自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编译器… 这里是一个使用kotlin编译器编译kotlin包中的类的一个例子…所以我认为应该有办法在gradle中也是这样!我希望…

我到目前为止所尝试的是:

  1. 我尝试通过配置KotlinCompile任务来配置gradle.build:

     import org.jetbrains.kotlin.gradle.tasks.KotlinCompile tasks.withType(KotlinCompile) { it.kotlinOptions.allowKotlinPackage = true } 

    Gradle脚本运行良好, 但这似乎被忽略 …我仍然遇到错误。

  2. 我试图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) 

    学习源代码…我相当肯定这会工作,但显然它没有。 我尝试了和没有抛出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构建脚本来构建您的叉。 该脚本已经提供了允许编译kotlin包中的文件的选项。

这个错误与Gradle无关。 Kotlin编译器不会在kotlin包中编译代码,除非您正在开发Kotlin本身。

这是因为你不能在java包中编写代码的原因。