gradle - 在 Gradle 中禁用对使用 'kotlin' 包的检查

标签 gradle build.gradle kotlin

当我尝试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 中完成它!....我希望...

到目前为止我尝试了什么:

  1. 我尝试通过配置 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 ...我仍然遇到错误。

  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)
    

    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/

相关文章:

java - 项目移动后 Gradle 依赖库为空

android - 无法解析配置 : ':app:debugRuntimeClasspath' 的所有文件

java - Android kotlin accountkit - 无法正常工作

android - 如何从屏幕底部到顶部为 ConstraintLayout 设置动画?

java - Gradle 是否需要 JDK 来编译 Java?

groovy - 如何使用Gradle从txt文件中提取键值对

android - 如何接受Android Studio SDK许可?

java - Java IOException使Gradle构建失败

gradle - 错误 ionic 建筑

json - 从Kotlin的子类获取SerializedName参数