具有Kotlin依赖性的OSGi项目

时间:2018-12-10 04:46:59

标签: kotlin osgi

我正在将Java项目转换为Kotlin,并将其作为OSGi捆绑软件进行部署。我已经包含了console.log(9007199254740992 === 9007199254740993); console.log(1010000110101100200 === 1010000110101100100)kotlin-osgi-bundle依赖项:

kotlin-stdlib-jdk8

我还包括了<dependencies> <dependency> <groupId>org.jetbrains.kotlin</groupId> <artifactId>kotlin-osgi-bundle</artifactId> <version>1.3.11</version> </dependency> <dependency> <groupId>org.jetbrains.kotlin</groupId> <artifactId>kotlin-stdlib-jdk8</artifactId> <version>1.3.11</version> </dependency> </dependencies> ,可以成功打包该项目。

但是,在部署时,出现以下错误:

kotlin-maven-plugin

我尝试在Error while starting bundle: file:/D:/Esri/ArcGIS/Server/GeoEvent/deploy/test-0.0.1.jar org.osgi.framework.BundleException: Unresolved constraint in bundle com.sample.test [464]: Unable to resolve 464.0: missing requirement [464.0] osgi.wiring.package; (&(osgi.wiring.package=kotlin)(version>=1.3.0)(!(version>=2.0.0))) at org.apache.felix.framework.Felix.resolveBundleRevision(Felix.java:3974)[org.apache.felix.framework-4.2.1.jar:] at org.apache.felix.framework.Felix.startBundle(Felix.java:2037)[org.apache.felix.framework-4.2.1.jar:] at org.apache.felix.framework.BundleImpl.start(BundleImpl.java:955)[org.apache.felix.framework-4.2.1.jar:] at org.apache.felix.fileinstall.internal.DirectoryWatcher.startBundle(DirectoryWatcher.java:1245)[16:org.apache.felix.fileinstall:3.4.2] at org.apache.felix.fileinstall.internal.DirectoryWatcher.startBundles(DirectoryWatcher.java:1217)[16:org.apache.felix.fileinstall:3.4.2] at org.apache.felix.fileinstall.internal.DirectoryWatcher.doProcess(DirectoryWatcher.java:509)[16:org.apache.felix.fileinstall:3.4.2] at org.apache.felix.fileinstall.internal.DirectoryWatcher.process(DirectoryWatcher.java:358)[16:org.apache.felix.fileinstall:3.4.2] at org.apache.felix.fileinstall.internal.DirectoryWatcher.run(DirectoryWatcher.java:310)[16:org.apache.felix.fileinstall:3.4.2] 中指定Kotlin依赖项:

maven-bundle-plugin

与原始Java项目(35KB)相比,这会生成相当大的JAR(4MB),并且在部署时出现以下错误:

<plugin>
  <groupId>org.apache.felix</groupId>
  <artifactId>maven-bundle-plugin</artifactId>
  <extensions>true</extensions>
  <configuration>
    <instructions>
      <Embed-Dependency>kotlin-osgi-bundle</Embed-Dependency>
    </instructions>
  </configuration>
</plugin>

这会重复很多次。

我是否缺少某些东西,或者这仅仅是意味着应用程序(Esri ArcGIS GeoEvent)不支持用Kotlin编写的OSGi捆绑软件?

1 个答案:

答案 0 :(得分:1)

您的捆绑包仅依赖于kotlin软件包,您需要确保满足此依赖关系。

打破这一点,就意味着您的捆绑软件具有Import-Package: kotlin,这是由于捆绑软件中的类文件依赖于kotlin软件包这一事实而派生的。我对Kotlin知之甚少,但显然kotlin软件包中包含标准库。

在具有导入软件包的包的地方,必须有另一个导出该软件包的包。这只是意味着您需要找到具有Export-Package: kotlin的捆绑软件,并确保将其与您自己的捆绑软件一起部署到OSGi Framework中。

另一种“解决方案”是将依赖项嵌入您自己的捆绑软件中,但是正如您所发现的那样,这通常会带来远远超过其解决方案的问题。