禁用在Gradle中使用“kotlin”包的检查

禁用在Gradle中使用“kotlin”包的检查,gradle,build.gradle,kotlin,Gradle,Build.gradle,Kotlin,当我尝试逐步构建我的项目时,我从compileKotlin任务收到一条错误消息: 发生这种情况是因为我在一个包中声明了一个以:kotlin 有没有办法通过配置我的build.gradle脚本来禁用此检查 编辑:我确信这是可能的,如果我用裸kotlin编译器编译。。。使用kotlin编译器在kotlin包中编译一个类…所以我认为在gradle中也应该有一种方法!。。。。我希望 到目前为止,我所尝试的: 我试图通过配置KotlinCompile任务来配置gradle.build: import or

当我尝试逐步构建我的项目时,我从compileKotlin任务收到一条错误消息:

发生这种情况是因为我在一个包中声明了一个以:kotlin

有没有办法通过配置我的build.gradle脚本来禁用此检查

编辑:我确信这是可能的,如果我用裸kotlin编译器编译。。。使用kotlin编译器在kotlin包中编译一个类…所以我认为在gradle中也应该有一种方法!。。。。我希望

到目前为止,我所尝试的: 我试图通过配置KotlinCompile任务来配置gradle.build:

import org.jetbrains.kotlin.gradle.tasks.KotlinCompile

tasks.withType(KotlinCompile) {
    it.kotlinOptions.allowKotlinPackage = true
}
gradle脚本通过这些更改运行良好……但我仍然遇到错误

我试图对KotlinCompile类进行子类化,并覆盖其子类,并用我的版本替换现有的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,但当我再次尝试渐变生成时,总是会出现以下错误:

我可能无论如何都不应该这样做……但我真的很想尝试一下


谢谢大家!

这个错误与格雷德尔无关。除非您正在开发Kotlin本身,否则Kotlin编译器不会编译Kotlin包中的代码


这与不能在java包中编写代码的原因相同。

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


这样做的原因与您不能在java包中编写代码的原因相同。

如果Kotlin标准库与您正在使用的JVM不兼容,那么听起来您实际上应该做的是fork Kotlin,进行与JVM兼容所需的更改,然后使用标准构建fork。脚本已经提供了允许在kotlin包中编译文件的选项。

如果kotlin标准库与您正在使用的JVM不兼容,听起来您实际上应该做的是fork kotlin,进行与JVM兼容所需的更改,然后使用标准构建fork。脚本已经提供了允许在kotlin包中编译文件的选项。

包的全名是什么?kotlin.jvm.internal….哈哈:xKotlin.jvm.internal…包的全名是什么?kotlin.jvm.internal….哈哈:xHi voddan,谢谢你的回答..但我认为它不准确。当前可用的kotlin编译器提供选项-Xallow kotlin package,该选项将禁用kotlin package检查如果有kotlin编译器,请运行以下命令:kotlinc-X以查看该选项的说明。此外,java编译器并不阻止我们在java包中声明类。我刚刚用kotlin编译器在kotlin包中编译了一个类,并用java包编译了java,以确保这是有趣的,因为我也对java进行了检查,得到了java.lang.SecurityException:禁止的包名:java.test1I我知道编译器选项,但是,除非您是Kotlin开发团队的成员,否则绝对不应该使用它。kotlin包中的类在某些情况下的编译方式不同于所有其他情况。不要将此用于开发!你说得对。当试图在java包中运行一个主函数时,会出现这种异常。但是可以在java包中声明一个类,然后使用另一个包中的类…我之所以试图在kotlin包中声明东西,是因为我正在为第三方JVM编程,该JVM用于特定的嵌入式系统…这个JVM是标准库并没有标准JVM中存在的所有类…这使得包括kotlin的运行库在内的所有类都会得到未解析的符号…所以我想尝试一下,看看是否可以修复它,尽管我认为我很可能会失败。我认为这是一个值得与kotlin团队讨论的问题。在上提交问题,他们将帮助解决问题。嗨,沃丹,谢谢你的回答。但我认为这不准确。当前可用的kotlin编译器提供选项-Xallow kotlin package,该选项将禁用kotlin package检查如果有kotlin编译器,请运行以下命令:kotlinc-X以查看该选项的说明。此外,java编译器并不阻止我们在java包中声明类。我刚刚用kotlin编译器在kotlin包中编译了一个类,并用java包编译了java,以确保这是有趣的,因为我也对java进行了检查,得到了java.lang.SecurityException:禁止的包名:java.test1I我知道编译器选项,但是,除非您是Kotlin开发团队的成员,否则绝对不应该使用它。kotlin包中的类在某些情况下的编译方式不同于所有其他情况。不要将此用于开发!你说得对。当尝试运行java包中的主函数时,会发生该异常。但是它是
可以在java包中声明一个类,然后使用另一个包中的类…我之所以尝试在kotlin包中声明东西,是因为我正在为第三方JVM编程,该JVM的标准库并不包含标准JVM中存在的所有类…这使得包括kotlin的运行库可以得到未解析的符号…所以我想尝试一下,看看是否可以修复它,尽管我认为我很可能会失败。我认为这是一个值得与kotlin团队讨论的问题。在上提交问题,他们将帮助解决问题。
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)
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