如何修复Kotlin库中没有在Kotlin代码中解析的Kotlin库(在java项目中)?

问题描述 投票:0回答:1

我有两个项目。一个完全写在Kotlin中的导出客户端工件。我试图在第二个项目中使用客户端,该项目混合了java / kotlin代码。

在java类中,我没有问题导入kotlin文件以供使用,但在任何kotlin文件中,IntelliJ无法解析导入。所有其他kotlin代码工作正常,我可以通过maven在命令行上编译没有问题。这只是IntelliJ无法识别我正在寻找的包的问题。

我在maven工具栏以及项目中列出的外部库中都看到了包。我已经检查过这些罐子,而且确实存在我希望com/foo/bar/BazClient.class存在的文件,但是import com.foo.bar.BazClient告诉我包装bar(来自其他项目的代码)不存在。完全相同的import语句在java代码中运行得很好。

进一步添加我的问题导入此客户端的完全相同的java类,如果我使用IJ的内置方法转换为kotlin,则无法在IntelliJ中编译。 “构建项目”操作成功完成,没有警告/错误。

Kotlin客户端定义为:

package com.foo.bar

import retrofit2.http.GET

interface BazClient {
    @GET("/v1/fuzz")
    fun getFuzz(): Call<FuzzResponse>
}

工作java代码:

package com.whodat.wat;

import javax.inject.Singleton;
import com.foo.bar.BazClient;

@Singleton
public class CallTheService {
    private final BazClient bazClient;

    public CallTheService(BazClient bazClient) {
        this.bazClient = bazClient;
    }

    public FuzzResponse callIt() throws IOException {
        return bazClient.getFuzz().execute().body();
    }
}

失败的kotlin代码:

package com.whodat.wat

import javax.inject.Singleton
import com.foo.bar.BazClient // "bar" is red in editor

@Singleton
// Can't resolve "BazClient" here 
class CallTheService(private val bazClient: BazClient) {

    fun callIt(): FuzzResponse {
        return bazClient.getFuzz().execute().body()!!
    }
}
java maven intellij-idea kotlin shared-libraries
1个回答
0
投票

事实证明这是发布客户端工件时的问题。我们正在使用maven阴影和jar插件来创建罐子,并导致罐子里的许多kotlin_modules令人困惑IJ

META-INF/client.kotlin_module
META-INF/descriptors.jvm.kotlin_module
META-INF/descriptors.kotlin_module
META-INF/descriptors.runtime.kotlin_module
META-INF/deserialization.kotlin_module
META-INF/kotlin-reflect-api.kotlin_module
META-INF/metadata.jvm.kotlin_module
META-INF/metadata.kotlin_module
META-INF/util.runtime.kotlin_module
META-INF/kotlin-stdlib.kotlin_module
META-INF/kotlin-stdlib_coroutinesExperimental.kotlin_module
META-INF/kotlin-stdlib-common.kotlin_module
META-INF/kotlin-stdlib-common-coroutines.kotlin_module
META-INF/kotlin-stdlib-jdk8.kotlin_module
META-INF/kotlin-stdlib-jdk7.kotlin_module

从客户端构建中删除那些似乎已经解决了问题,现在我们只有一个client.kotlin_module。

© www.soinside.com 2019 - 2024. All rights reserved.