为什么我包装的罐子中没有kotlin-reflect库?

我正在建立一个用Kotlin编写的库,并通过Maven打包成一个罐子。在我的pom中,我依赖Kotlin-reflect工件。我能够成功编译和打包,但是当我尝试在另一个项目(即服务)中使用此jar时,出现错误消息:“在运行时未找到Kotlin反射实现。请确保您拥有kotlin- classpath中的reflect.jar”。如果我将依赖项包含在服务的pom中,那么一切正常,但是我希望库jar本身已经具有该依赖项,而图书馆的使用者不必将此依赖项添加到其pom.xml中。

我尝试将依赖项的范围从编译更改为运行时。我只是不明白为什么Kotlin-reflect不会被打包在库的jar中。

<dependency>
  <groupId>org.jetbrains.kotlin</groupId>
  <artifactId>kotlin-reflect</artifactId>
  <version>1.3.50</version>
</dependency>

服务中发生的错误:

线程“主”中的异常kotlin.jvm.KotlinReflectionNotSupportedError:在运行时找不到Kotlin反射实现。确保您在类路径中有kotlin-reflect.jar。

qq568957159 回答:为什么我包装的罐子中没有kotlin-reflect库?

您构建的是一个“瘦”的jar:它仅包含从项目代码中编译的类。它不包括依赖项。

(您仍然需要在POM中指定依赖项,否则它将无法编译您的代码。)

因此,您的主要选择是:

  • 分发“稀”罐。如果这是供您自己使用,则可以将依赖项jar复制到目标环境,并将其添加到您构建的类之外的类路径中。对于外部提供的库,您可以简单地在发布的POM中列出依赖项;您的用户应从那里接他们。

  • 构建一个“胖” jar,其中除了代码外还捆绑了所有依赖项。有关这些信息,请参见this question

如果这是用于Web应用程序的,尤其是使用Spring或类似的应用程序,则可以构建一个.war文件,该文件仍然捆绑了依赖项。

本文链接:https://www.f2er.com/3137057.html

大家都在问