我试图在我的karaf OSGI服务中使用AWS加密"DirectKmsMaterialProvider“,但它抛出了classnotfound异常:
原因: 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) at org.apache.felix.framework.BundleWiringImpl.access$400(BundleWiringImpl.java:79) at org.apache找不到wrap_file__Users_rioortizr_.m2_repository_com_amazonaws_aws-dynamodb-encryption-java_1.11.0_aws-dynamodb-encryption-java-1.11.0.jar:java.lang.ClassNotFoundException。java.lang.ClassLoader.loadClass(ClassLoader.java:357):1.8.0_51上的felix.framework.BundleWiringImpl$BundleClassLoader.loadClass(BundleWiringImpl.java:2018) ...还有45个
我已经在pom.xml和features.xml中添加了依赖项
在我的厕所里..。
 <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>我是不是漏掉了什么?
谢谢
你好,里约热内卢
发布于 2017-03-02 21:23:38
似乎aws-dynamodb-encryption-java包在他的清单文件导入中没有com.amazonaws.services.dynamodbv2.datamodeling包,这在wrap中经常发生。
要解决这个问题,您可以像servicemix一样对依赖项进行OSGi-fy,您可以手动控制和修复导入-导出。例如:https://github.com/apache/servicemix-bundles
发布于 2017-03-03 21:30:05
作为OSGi项目的依赖项,不是OSGI捆绑包的JAR可能是一个真正的麻烦。在花了很多时间尝试解决通过Karaf的包装部署程序部署的JAR产生的类路径问题后,我默认将非OSGi依赖项嵌入到我自己的包中。查看有关不同选项的bundle plugin documentation。举一个简单的例子,看看这个SO thread的公认答案。
虽然嵌入依赖关系解决了很多问题,但它也带来了一些令人头疼的问题。一个是你正在膨胀你自己的捆绑包,并且你不能在你的多个捆绑包中共享这些依赖项。另一个原因是,常规JAR通常附带大量的包导入,这些包在运行时或仅在某些使用场景中是不需要的,并且它们的可传递Maven依赖项也不提供这些包导入。为了控制包的大小,您需要剔除所有这些依赖项,并禁止将这些包添加到您自己的包的清单中。在引用的示例中,我可以排除9个包。在我的" embed -heaviest“包中,这个列表包含了大约70个包(用于嵌入Titan图形库及其依赖项)。
https://stackoverflow.com/questions/42477517
复制相似问题