我正在将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捆绑软件?
答案 0 :(得分:1)
您的捆绑包仅依赖于kotlin
软件包,您需要确保满足此依赖关系。
打破这一点,就意味着您的捆绑软件具有Import-Package: kotlin
,这是由于捆绑软件中的类文件依赖于kotlin
软件包这一事实而派生的。我对Kotlin知之甚少,但显然kotlin
软件包中包含标准库。
在具有导入软件包的包的地方,必须有另一个导出该软件包的包。这只是意味着您需要找到具有Export-Package: kotlin
的捆绑软件,并确保将其与您自己的捆绑软件一起部署到OSGi Framework中。
另一种“解决方案”是将依赖项嵌入您自己的捆绑软件中,但是正如您所发现的那样,这通常会带来远远超过其解决方案的问题。