为mingw / ios / linus /其他源集导入Java库的解决方法?

问题描述

我知道,对于某些OS源集而言,依赖于安装JVM是一个很奇怪的用例,请允许我仔细阅读一下用例。

我正在编写一个简单的实用程序来包装对steamCMD(https://developer.valvesoftware.com/wiki/SteamCMD)的调用,该程序具有依赖于平台的安装过程。所以,我自然应该拥有

// commonMain / steamCmdGetter.kt
expect interface SteamCmdGetter {
    fun installClient()
}
// [OS] / steamCmdGetter.kt
actual interface SteamCmdGetter { /* ... */ }

另一方面,我的实用程序还需要处理文件存储(例如,下载并检查客户端在存储中是否存在),因此我也可以使用文件类。

// commonMain / File.kt
expect interface File

我知道JB团队在其教程中有明确的建议。

我们建议您仅将期望和实际声明用于具有平台特定依赖性的Kotlin声明。最好在共享模块中实现尽可能多的功能,即使这样做会花费更多时间。

但是,在警告的警告下,我不想编写MyFile实现来避免为这种常见任务而重新设计轮子,但是java.io.File在现场如此占主导地位,以至于我无法在Gradle / Maven上找到任何Kotlin替代品。

这是否意味着我被迫最后写MyFile?还是有将Java库导入Kotlin MPP平台sourceSets的解决方法

解决方法

首先,一个人只能将Java库用于jvmandroid目标,而不能用于Kotlin / Multiplatform提供的其他库。实际上,这正是使用Kotlin / JVM的目标子集。 Kotlin / JS和Kotlin / Native都不提供与Java的互操作性,它们具有自己的互操作功能。有关差异的详细信息,请参见this page
关于特别处理文件。答案很可能是肯定的,您将必须针对每个目标实施它。这种工作通常是特定于平台的,因为它几乎不依赖于OS实施。但是,您搜索的部分功能肯定应该在platform.posix.* platform library中找到,即使它看起来更像C风格。


P.S。网上快速搜索使我进入了这个社区图书馆list,也许会有所帮助。另外,kotlinlang Slack社区(查找链接here)可能有一些有趣的解决方案可供分享。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...