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

Я пытаюсь использовать шифрование AWS «DirectKmsMaterialProvider» в моем сервисе karaf OSGI, но он выдает исключение 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.

в моей пом...

 <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>

в функциях.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>

Я что-то пропустил здесь?

Спасибо

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


person Rio Ortiz    schedule 27.02.2017    source источник


Ответы (2)


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

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

person Cλstor    schedule 02.03.2017

JAR-файлы, которые не являются пакетами OSGi, поскольку зависимости от проектов OSGI могут быть настоящей головной болью. Потратив много часов на то, чтобы разобраться с проблемами путей к классам, которые возникают из-за файлов JAR, развернутых с помощью средства развертывания Karaf, я сделал по умолчанию встраивание зависимостей, отличных от OSGi, в свой собственный пакет. Ознакомьтесь с документацией по подключаемым модулям. о различных вариантах. В качестве простого примера взгляните на принятый ответ на этот folder-to-resolve-transitiv/34635125#34635125">SO thread.

Хотя встраивание зависимостей решает множество проблем, оно сопряжено и с головной болью. Во-первых, вы расширяете свой собственный пакет и не можете разделить эти зависимости между несколькими вашими пакетами. Во-вторых, обычные JAR-файлы часто поставляются с большим количеством импортируемых пакетов, которые не требуются во время выполнения или только в определенных сценариях использования, а также не обеспечиваются их транзитивными зависимостями Maven. Чтобы контролировать размер вашего пакета, вам нужно отсеять все эти зависимости и запретить добавление этих пакетов в МАНИФЕСТ вашего собственного пакета. В указанном примере я могу исключить 9 пакетов. В моем «самом тяжелом» комплекте этот список содержит около 70 пакетов (для встраивания графовой библиотеки Titan и ее зависимостей).

person Ralf    schedule 03.03.2017