当前位置: 首页 > 知识库问答 >
问题:

Gradle无法使用kotlin类编译java类

窦伟
2023-03-14

我有一个gradle 4.1多项目,其中包含一个包含2个子文件夹“api”和“实现”的“项目A”。

多项目使用在主build.gradle的子项目部分中定义的< code>kotlin和< code>java-library插件。实现项目具有对< code>:projectA:api的API依赖性

在api文件夹中,我在“src/main/java”中有kotlin和java文件,在实现项目中,我正在从API创建kotlin类的新实例。

在Intellij Idea内部,我没有任何编译错误;但是当我使用gradle编译整个项目时,我有一个< code >错误:找不到符号。就好像< code>compileJava没有访问文件夹< code>kotlin-classes的权限。

构建/kotlin类中,我看到我的文件.class类文件也在构建/类目录上

错误的详细信息:

任务:p rojectA:api:compileKotlin 使用 kotlin 增量编译

任务:p路线A:实现:编译Java (...) 错误: 找不到符号 (导入失败)

更新1:删除java库解决了我的问题

共有1个答案

鱼浩荡
2023-03-14

这是java-Library插件的一个已知问题:当在具有另一种JVM语言(静态编程语言、Scala、Groovy等)的项目中使用时,它不会注册另一种语言的类,以便依赖项目在使用类时获得它们。

幸运的是,它也有一个解决方法。适应科特林,它看起来像这样:

configurations {
    apiElements {
        outgoing.variants.getByName('classes').artifact(
            file: compileKotlin.destinationDir,
            type: ArtifactTypeDefinition.JVM_CLASS_DIRECTORY,
            builtBy: compileKotlin)
    }
}

< sup >如果您使用Kapt1,它是< code > file:compilekotlinafterjava . destination dir ,对于低于4.0的Gradle版本,请使用< code > builtBy:copyMainKotlinClasses 。

这个问题也在Kotlin问题跟踪器:KT-18497中进行了跟踪,跟踪该问题以查看它何时在Kotlin Gradle插件端得到修复,这样就不再需要上述解决方法。

 类似资料:
  • Kotlin编译器在这里发出警告(未检查的强制转换): 据我所知,Kotlin smart cast应该知道由检查。 Java代码和编译器给出了完全相同的结果。 为了为每个实现获得正确的util类,我在伴生对象上创建了一个函数,该函数基于泛型类型T的参数为每个实现返回正确的util类,该参数扩展了a:,因此返回类型为。 但是,当我为的每个派生类编写函数体时,使用检查参数的类型,然后使用返回正确的u

  • 我从github获得了一个项目的源代码(一个android应用程序),我正在尝试推出它,这个项目叫做“RTKGPS+”,它是一个使用C++库Rtklib来玩GPS和原始测量的Anroid应用程序。 我的Android环境配置很低, 我无法编译这个项目,我得到了以下错误: null null 我尝试从以下答案添加分级代码:https://stackoverflow.com/a/50707270/63

  • 该应用程序从另一台机器为我工作,现在从另一台计算机上的存储库下载文件给了我这个问题 失败:构建失败,出现异常。 > 其中:设置文件'C:\Users\samoe\Desktop\MCGPS\TeachAll\android\Settings.gradle' 出了什么问题:无法编译设置文件“C:\Users\samue\Desktop\MCGPS\TeachAll\android\settings.

  • 您好,最近我开始从c语言转换到java语言,其中一个练习是使用cmd编译和运行java程序。 我用netbeans编写了一个简单的HelloWorld程序并保存了它, 所以现在我的孩子得救了。java文件位于C:\Users\eatmybuns\Documents\NetBeansProjects\Helloworld\src\Helloworld中 现在我打开cmd,我将目录更改为上面的并键入j

  • 我是Spring MVC的新手,我试图创建一个简单的Hello World程序,但当我运行该程序时,它显示出以下错误: StackTrace:]根本原因为org.apache.jasper.JasperException:无法为JSP编译类: 在生成的java文件[d:\workspace\springtest1.metadata.plugins\org.eclipse.wst.server.co

  • 主要内容:SDKMAN!,创建和运行第一个程序,hello.kt,运行 REPL(交互式解释器),使用命令行执行脚本Kotlin 命令行编译工具下载地址:https://github.com/JetBrains/kotlin/releases/tag/v1.1.2-2,目前最新为 1.1.2-2。 你可以选择一个最新的稳定版下载。 下载完成后,解压到指定目录,然后将 bin 目录添加到系统环境变量。bin 目录包含编译和运行 Kotlin 所需的脚本。 SDKMAN! 在 OS X、Linux、