如何使用命令行kotlin编译器kotlinc导入com.google。*

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

源代码(独立)

import com.google.gson.Gson
import com.google.gson.GsonBuilder

class LocationReport(var dateTimeStamp : String,
                     var latitude : Double, var longitude : Double)
{
}

fun main(args: Array<String>) {
    val gson = Gson()
    val gsonPretty = GsonBuilder().setPrettyPrinting().create()

    val report = LocationReport("24-May-2020 8:15 AM PDT", 37.422, -122.084)

    val jsonReport: String = gson.toJson(report)
    println(jsonReport)

    val jsonReportPretty: String = gsonPretty.toJson(report)
    println(jsonReportPretty)
}

[当我尝试使用kotlinc进行编译时,它失败,并显示“错误:未解决的引用:google”。在没有引用Gson和相关构造的情况下,程序可以编译,并且.jar文件可以正常运行。但当然我无法获得JSON功能。

[当我尝试创建gradle项目时,我最终使构建成功,但是当我尝试运行生成的.jar文件时,在该.jar文件中得到了“ no main manifest attribute”。

我确实搜索过“没有主清单属性,但没有成功。特别是,此answer对我不起作用。

如果有明显的答案,或者我没有遵循正确的协议,我将感到遗憾。我已经为此工作了几个小时,并且尝试了几种不同的方法,但均未成功。我真的很想在Android Studio外部运行该程序。

谢谢您的考虑。

更新:感谢用户指出我需要下载Gson .jar文件。

现在的问题是kotlin编译器kotlinc似乎无法识别环境变量CLASSPATH的值。通过使用-cp选项,我可以获取kotlinc来定位该Gson jar,但是使用生成的.jar文件,java无法定位该Gson jar,无论是在命令行上使用-cp还是将CLASSPATH配置为定位该Gson jar。

找到Gson jar适用于Java。我找到了一个引用Gson的简单Java程序。 javac(编译器)和java都通过CLASSPATH变量定位相同的Gson jar。

那么kotlinc为什么不能创建jar以便Java运行时可以找到Gson jar?我真的很想让它在Android Studio之外运行。从命令行可以轻松完成初始验证和调试。请注意,我的原始程序会打印两个不同的JSON字符串。 Android Studio可以实现此功能,但从我的初学者角度来看,难度更大。

再次感谢您的阅读。请原谅任何违反stackoverflow协议的行为。

kotlin import command-line-interface classpath kotlinc
1个回答
0
投票

我有与OP完全相同的问题。我有一个从IntelliJ内部和命令行运行的kotlin程序,直到添加了Gson用法为止。 IntelliJ IDE能够获取依赖于Gson的版本,以在IDE中进行编译和运行。但是,当我尝试从命令行执行此操作时,运行时看不到Gson JsonSyntaxException类。

首先是代码片段,然后是kotlinc / java编译/执行脚本,然后是运行时错误消息。

package Fatashi

import com.google.gson.Gson
import com.google.gson.JsonSyntaxException
import com.google.gson.reflect.TypeToken

然后从bash脚本编译并运行它:

:
$ kotlinc src/Fatashi/*.kt -cp lib/gson-2.8.6.jar  -include-runtime -nowarn -d fatashi.jar 
$ java -jar fatashi.jar -cp $APP_PATH/lib/gson-2.8.6.jar

以及运行时错误生成:

Exception in thread "main" java.lang.NoClassDefFoundError: com/google/gson/JsonSyntaxException
at Fatashi.ConfigProperties.<clinit>(ConfigProperties.kt)
at Fatashi.MyEnvironment.<clinit>(MyEnvironment.kt:24)
at Fatashi.Version$Companion.printMyVersion(Version.kt:23)
at Fatashi.FatashimainKt.main(fatashimain.kt:16)
Caused by: java.lang.ClassNotFoundException: com.google.gson.JsonSyntaxException
at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:581)
at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178)
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:522)

此时,我对使用Maven或Gradle进行构建不感兴趣。请仅回答此处以及OP提出的问题。

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