0

我正在尝试在我的 karaf OSGI 服务中使用 AWS 加密“DirectKmsMaterialProvider”,但它抛出了 classnotfound 异常:

引起:java.lang.ClassNotFoundException: com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBMappingException 未找到 wrap_file__Users_rioortizr_.m2_repository_com_amazonaws_aws-dynamodb-encryption-java_1.11.0_aws-dynamodb-encryption-java-1.11.0.jar [2404]在 org.apache.felix.framework.BundleWiringImpl.findClassOrResourceByDelegation(BundleWiringImpl.java:1574) 在 org.apache.felix.framework.BundleWiringImpl.access$400(BundleWiringImpl.java:79) 在 org.apache.felix.framework.BundleWiringImpl$ BundleClassLoader.loadClass(BundleWiringImpl.java:2018) 在 java.lang.ClassLoader.loadClass(ClassLoader.java:357)[:1.8.0_51] ... 45 更多

我已经在 pom.xml 和 features.xml 中添加了我的依赖项

在我的 pom...

 <dependency>
    <groupId>com.amazonaws</groupId>
    <artifactId>aws-java-sdk-dynamodb</artifactId>
    <version>1.11.0</version>
 </dependency>
 <dependency>
     <groupId>com.amazonaws</groupId>
     <artifactId>aws-dynamodb-encryption-java</artifactId>
     <version>1.11.0</version>
</dependency>

在 features.xml 中...

<bundle>wrap:mvn:com.amazonaws/aws-dynamodb-encryption-java/1.11.0</bundle>
<bundle>wrap:mvn:com.amazonaws/aws-java-sdk-dynamodb/1.11.0</bundle>

我在这里错过了什么吗?

谢谢

问候,里约

4

2 回答 2

0

似乎aws-dynamodb-encryption-java捆绑包在他的清单文件导入时没有com.amazonaws.services.dynamodbv2.datamodeling包,这种情况经常发生在 wrap 中。

要解决这个问题,您可以像 servicemix 一样对依赖项进行 OSGi-fy,这样做您可以手动控制和修复导入导出。例如:https ://github.com/apache/servicemix-bundles

于 2017-03-02T13:23:38.143 回答
0

不是 OSGi 捆绑包的 JAR 作为 OSGI 项目的依赖项在背后可能是一个真正的痛苦。在花了很多时间试图解决通过 Karaf 的 wrap deployer 部署的 JAR 引起的类路径问题之后,我将非 OSGi 依赖项嵌入到我自己的包中作为默认设置。查看有关不同选项的捆绑插件文档。举一个简单的例子,看看这个SO thread的接受答案。

虽然嵌入依赖项解决了很多问题,但它也带来了一些令人头疼的问题。一是你在膨胀你自己的包并且你不能在你的多个包之间共享这些依赖。另一个原因是常规 JAR 通常带有大量在运行时不需要或仅在某些使用场景中不需要的包导入,并且它们的传递性 Maven 依赖项也不提供这些包导入。为了控制包的大小,您需要清除所有这些依赖项并禁止将这些包添加到您自己的包的清单中。在引用的示例中,我可以排除 9 个包。在我的“embed-heaviest”包中,这个列表包含大约 70 个包(用于嵌入 Titan 图形库及其依赖项)。

于 2017-03-03T13:30:05.457 回答