当我尝试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
脚本来取消此检查?
我尝试通过配置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
我可能不应该这样做......但我真的想尝试一下。
谢谢你!答案 0 :(得分:4)
如果Kotlin标准库与您正在使用的JVM不兼容,那么听起来您应该实际执行的是fork Kotlin,进行与JVM兼容所需的更改,然后使用标准{{3}构建你的fork。该脚本已提供允许编译kotlin
包中的文件的选项。
答案 1 :(得分:2)
该错误与Gradle无关。 Kotlin编译器不会在kotlin
包中编译代码,除非您正在开发Kotlin本身。
这样做是因为您无法在java
包中编写代码。