java - 如何运行kotlin类文件并指定一个或多个库jar文件?

标签 java intellij-idea kotlin jvm

我正在寻找一种方法来运行 Intellij 为 hello world 生成的标准类文件,使用以 kotlin-stdlib-1.3.11 作为唯一依赖项的 gradle 构建。

我知道我可以制作一个 jar 文件并运行它,但这不是问题。这个问题已经在很多地方得到了回答,但请不要用这些解决方案来回答,因为这不是我要问的问题。

“hello world”的简单类文件需要访问 kotlin-stdlib-1.3.11.jar,我正在寻找一种方法来运行该类文件并手动指定用于满足依赖关系的 jar。

我正在为团队成员记录原因:

java HelloKt

在类文件所在的文件夹中,应该给出 NoClassDefFoundError 并且还希望显示如何手动指定“运行类,但也使用 kotlin std lib”应该如何工作。

我再说一遍,我并不是想让程序运行。我试图展示如何运行标准库来运行类文件。

最佳答案

这是关于 classpath .

简单的答案是运行 kotlin 而不是 java,因为这会自动将 Kotlin 支持添加到类路径中:

> kotlin HelloKt

但是,如果您需要运行 java,那么您需要自己设置类路径。

manpage对于java说:

The Java runtime searches for the startup class, and other classes used, in three sets of locations: the bootstrap class path, the installed extensions, and the user class path.

前两个是 Java 安装的一部分,很少涉及,因此您需要查看的是用户类路径。

您需要它包含 kotlin-runner.jarHelloKt.class 文件的路径。后者可以简单地为当前目录的 . ;前者取决于您安装 Kotlin 的位置。 (例如,我使用 Homebrew 安装了它,该 jar 当前为 /usr/local/Cellar/kotlin/1.3.31/libexec/lib/kotlin-runner.jar。)

联机帮助页继续:

   -classpath classpath
   -cp classpath
          Specifies a list of directories, JAR archives, and ZIP  archives
          to  search for class files.  Class path entries are separated by
          colons (:). Specifying -classpath or -cp overrides  any  setting
          of the CLASSPATH environment variable.
           
          If -classpath and -cp are not used and CLASSPATH is not set, the
          user class path consists of the current directory (.).

因此有两种方法可以做到这一点:在运行 java 之前设置 $CLASSPATH 环境变量:

> export CLASSPATH="/usr/local/Cellar/kotlin/1.3.31/libexec/lib/kotlin-runner.jar:."
> java HelloKt

或者传递 -classpath-cp 标志:

> java -cp /usr/local/Cellar/kotlin/1.3.31/libexec/lib/kotlin-runner.jar:. HelloKt

(或者,正如您所说,您可以构建一个包含 Kotlin 支持类以及您自己的 jar 文件。如果您要将其分发到可能未安装 Kotlin 的计算机,这可能是最佳选择。但这不是唯一的选择。)

关于java - 如何运行kotlin类文件并指定一个或多个库jar文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56543111/

相关文章:

scala - 如何将 Jar 库添加到 IntelliJ Idea SBT Scala 项目?

android - 新的 Jetpack 分页库使应用程序崩溃 - 新

java - Java 分层音频文件时的峰值削波

java - 使用 Jetty 支持 Angular 2 的 PathLocationHandler(使用 404 错误页面)

android - 如何使用 Intellij IDEA 中的 UMLGraph 创建 javadoc

java - this.getClass().getResource ("".getFile() 在使用 IntelliJ/Jetty 8.1.14 运行项目时返回开头为 "file:"的路径

firebase - RecyclerView不会从Firebase加载任何数据,并且所有行均显示为null

java - Android 中应用程序关闭时我们如何打开 Activity

java - 在java中将字符串列表/集合转换为json对象

java - 可以调用JAR中打包的REST-API controller吗?