Ошибка при использовании библиотеки шифрования AWS в комплекте OSGI

Я пытаюсь использовать AWS Encryption "DirectKmsMaterialProvider" в моем сервисе OSGI karaf, но он вызывает исключение classnotfound:

Вызванный: java.lang.ClassNotFoundException: com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBMappingException не найден wrap_file__Users_rioortizr_.m2_repository_com_amazonaws_aws-dynamodb-шифрования java_1.11.0_aws-dynamodb-шифрования Java-1.11.0.jar [2404] по адресу org.apache.felix.framework.BundleWiringImpl.findClassOrResourceByDelegation(BundleWiringImpl.java:1574) по адресу org.apache.felix.framework.BundleWiringImpl.access$400(BundleWiringImpl.javaapworkImpl.java:ra.fi. BundleClassLoader.loadClass(BundleWiringImpl.java:2018) в java.lang.ClassLoader.loadClass(ClassLoader.java:357)[:1.8.0_51] ... еще 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>

Я что-то здесь упускаю?

Спасибо

С уважением, Рио

2 ответа

Кажется, что aws-dynamodb-encryption-java расслоение не имеет com.amazonaws.services.dynamodbv2.datamodeling пакет при его импорте файла манифеста, это часто случается с переносом.

Чтобы исправить это, вы можете OSGi-фу зависимость, как и servicemix, делая это, вы можете контролировать и исправлять импорт-экспорт вручную. например: https://github.com/apache/servicemix-bundles

JAR-файлы, которые не являются OSGi-пакетами в качестве зависимостей проектов OSGI, могут быть настоящей болью с обратной стороны. Потратив много часов, пытаясь разобраться с проблемами пути к классам, возникающими в JAR-файлах, развернутых с помощью средства развертывания Karaf, я по умолчанию установил зависимости не-OSGi в свой собственный пакет. Ознакомьтесь с документацией к плагину пакета о различных опциях. Для простого примера взгляните на принятый ответ этого SO потока.

В то время как встраивание зависимостей решает много проблем, оно имеет свою долю головной боли. Один из них заключается в том, что вы раздуваете свой собственный пакет и не можете разделить эти зависимости между несколькими вашими пакетами. Другое состоит в том, что обычные JAR-файлы часто сопровождаются большим количеством импортов пакетов, которые не требуются во время выполнения или только в определенных сценариях использования, а также не обеспечиваются их переходными зависимостями Maven. Чтобы контролировать размер вашего пакета, вам нужно отсеять все эти зависимости и запретить добавление этих пакетов в манифест вашего собственного пакета. В приведенном примере я могу исключить 9 пакетов. В моем "самом встроенном" пакете этот список содержит около 70 пакетов (для встраивания библиотеки графов Titan и ее зависимостей).

Другие вопросы по тегам