Я пытаюсь использовать набор инструментов Apache jclouds (https://jclouds.apache.org/) для загрузки файлов в хранилище AWS или Azure. В частности, я хочу сделать это в приложении для Android.
Я использую Android Studio IDE для разработки, использую Gradle для сборки и пишу все на Kotlin.
jclouds работает абсолютно нормально, когда я просто запускаю скрипт main() из IDE. Я могу нормально загружать файлы в Azure или AWS. Минимальный пример (на Kotlin), который не загружается, но иллюстрирует проблему:
import org.jclouds.providers.Providers
fun main() {
println(Providers.all().map{it.id}.toSet())
}
>> [aws-s3, azureblob, b2, google-cloud-storage, rackspace-cloudfiles-us, rackspace-cloudfiles-uk]
в котором просто перечислены все поставщики облачных услуг, которые поддерживает jcloud.
Когда я пытаюсь запустить тот же код из своего приложения, у меня возникают проблемы. Во-первых, сборка APK завершается неудачно из-за нескольких/повторяющихся путей META-INF/DEPENDENCIES:
Execution failed for task ':app:mergeDebugJavaResource'.
> A failure occurred while executing com.android.build.gradle.internal.tasks.MergeJavaResWorkAction
> 21 files found with path 'META-INF/DEPENDENCIES' from inputs:
- /Users/senparsons/.gradle/caches/transforms-3/3a6b0c849edb2a98ffcd0988e9962ed2/transformed/jetified-jclouds-allblobstore-2.6.0.jar
- /Users/senparsons/.gradle/caches/transforms-3/f66b159f397ffa685234aaf7f817ecf2/transformed/jetified-aws-s3-2.6.0.jar
- /Users/senparsons/.gradle/caches/transforms-3/16dd5496f82c90f4c1357b5d6d3fca4e/transformed/jetified-s3-2.6.0.jar
[.... etc]
Когда я исправлю это в файле build.gradle моего приложения с помощью:
packagingOptions {
pickFirst 'META-INF/AL2.0'
pickFirst 'META-INF/LGPL2.1'
// required to allow to build with jcloud (due to jetified-xxx dependencies):
merge 'META-INF/DEPENDENCIES*'
merge 'META-INF/LICENSE.md'
merge 'META-INF/NOTICE.md'
}
приложение собирается, но когда я вызываю приложение,
Providers.all().map{it.id}.toSet()
Я получаю исключение:
java.util.ServiceConfigurationError: org.jclouds.providers.ProviderMetadata: Provider org.jclouds.aws.s3.AWSS3ProviderMetadata could not be instantiated
at java.util.ServiceLoader.fail(ServiceLoader.java:233)
at java.util.ServiceLoader.access$100(ServiceLoader.java:183)
at java.util.ServiceLoader$LazyIterator.nextService(ServiceLoader.java:392)
at java.util.ServiceLoader$LazyIterator.next(ServiceLoader.java:416)
at java.util.ServiceLoader$1.next(ServiceLoader.java:494)
at com.google.common.collect.ImmutableCollection$Builder.addAll(ImmutableCollection.java:433)
at com.google.common.collect.ImmutableCollection$ArrayBasedBuilder.addAll(ImmutableCollection.java:538)
at com.google.common.collect.ImmutableSet$Builder.addAll(ImmutableSet.java:527)
at org.jclouds.providers.Providers.all(Providers.java:83)
[... etc ....]
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1135)
Caused by: java.lang.ExceptionInInitializerError
at org.jclouds.JcloudsVersion.get(JcloudsVersion.java:153)
E/AndroidRuntime: at org.jclouds.apis.internal.BaseApiMetadata.defaultProperties(BaseApiMetadata.java:84)
at org.jclouds.apis.internal.BaseApiMetadata$Builder.(BaseApiMetadata.java:111)
at org.jclouds.rest.internal.BaseHttpApiMetadata$Builder.(BaseHttpApiMetadata.java:77)
at org.jclouds.s3.S3ApiMetadata$Builder.(S3ApiMetadata.java:100)
at org.jclouds.aws.s3.AWSS3ApiMetadata$Builder.(AWSS3ApiMetadata.java:60)
at org.jclouds.aws.s3.AWSS3ApiMetadata.(AWSS3ApiMetadata.java:44)
at org.jclouds.aws.s3.AWSS3ProviderMetadata$Builder.(AWSS3ProviderMetadata.java:113)
at org.jclouds.aws.s3.AWSS3ProviderMetadata.builder(AWSS3ProviderMetadata.java:59)
at org.jclouds.aws.s3.AWSS3ProviderMetadata.(AWSS3ProviderMetadata.java:68)
at java.lang.Class.newInstance(Native Method)
at java.util.ServiceLoader$LazyIterator.nextService(ServiceLoader.java:388)
... 42 more
Caused by: java.lang.NullPointerException: META-INF/maven/org.apache.jclouds/jclouds-core/pom.properties
at com.google.common.base.Preconditions.checkNotNull(Preconditions.java:907)
at org.jclouds.JcloudsVersion.readVersionPropertyFromClasspath(JcloudsVersion.java:87)
at org.jclouds.JcloudsVersion.(JcloudsVersion.java:82)
at org.jclouds.JcloudsVersion.(JcloudsVersion.java:77)
at org.jclouds.JcloudsVersion.(JcloudsVersion.java:48)
... 54 more
Насколько я понимаю, jclouds использует «загрузчики сервисов» Java для загрузки классов «метаданных» для каждого поставщика (AWS, Azure и т. д.). т. е. загрузчик службы загружает класс метаданных (например, org.jclouds.aws.s3.AWSS3ProviderMetadata), который реализует интерфейс org.jclouds.providers.ProviderMetadata. Поскольку этот класс метаданных должен делать все, что связано с его провайдером (включая загрузку в хранилище), это не просто проблема получения списка строк провайдера.
Итак, что же является причиной службы? проблема с загрузчиком? Куда делись мои классы метаданных? Это связано с файлами META-INF/DEPENDENCIES? Насколько я понимаю, пользовательские файлы загрузчиков служб находятся в META-INF/SERVICES. Ближайший похожий пост, который я смог найти, — это Jclouds с несколькими провайдерами, но это мне мало чем помогло, кроме выявления проблемы.
Буду очень признателен за любую помощь. Спасибо.
К вашему сведению, мой единственный импорт jclouds (в build.gradle):
implementation 'org.apache.jclouds:jclouds-allblobstore:2.6.0'
Подробнее здесь: https://stackoverflow.com/questions/784 ... in-android
Apache jclouds — ошибка загрузчика службы при использовании в Android ⇐ Android
Форум для тех, кто программирует под Android
1716129480
Anonymous
Я пытаюсь использовать набор инструментов Apache jclouds (https://jclouds.apache.org/) для загрузки файлов в хранилище AWS или Azure. В частности, я хочу сделать это в приложении для Android.
Я использую Android Studio IDE для разработки, использую Gradle для сборки и пишу все на Kotlin.
jclouds работает абсолютно нормально, когда я просто запускаю скрипт main() из IDE. Я могу нормально загружать файлы в Azure или AWS. Минимальный пример (на Kotlin), который не загружается, но иллюстрирует проблему:
import org.jclouds.providers.Providers
fun main() {
println(Providers.all().map{it.id}.toSet())
}
>> [aws-s3, azureblob, b2, google-cloud-storage, rackspace-cloudfiles-us, rackspace-cloudfiles-uk]
в котором просто перечислены все поставщики облачных услуг, которые поддерживает jcloud.
Когда я пытаюсь запустить тот же код из своего приложения, у меня возникают проблемы. Во-первых, сборка APK завершается неудачно из-за нескольких/повторяющихся путей META-INF/DEPENDENCIES:
Execution failed for task ':app:mergeDebugJavaResource'.
> A failure occurred while executing com.android.build.gradle.internal.tasks.MergeJavaResWorkAction
> 21 files found with path 'META-INF/DEPENDENCIES' from inputs:
- /Users/senparsons/.gradle/caches/transforms-3/3a6b0c849edb2a98ffcd0988e9962ed2/transformed/jetified-jclouds-allblobstore-2.6.0.jar
- /Users/senparsons/.gradle/caches/transforms-3/f66b159f397ffa685234aaf7f817ecf2/transformed/jetified-aws-s3-2.6.0.jar
- /Users/senparsons/.gradle/caches/transforms-3/16dd5496f82c90f4c1357b5d6d3fca4e/transformed/jetified-s3-2.6.0.jar
[.... etc]
Когда я исправлю это в файле build.gradle моего приложения с помощью:
packagingOptions {
pickFirst 'META-INF/AL2.0'
pickFirst 'META-INF/LGPL2.1'
// required to allow to build with jcloud (due to jetified-xxx dependencies):
merge 'META-INF/DEPENDENCIES*'
merge 'META-INF/LICENSE.md'
merge 'META-INF/NOTICE.md'
}
приложение собирается, но когда я вызываю приложение,
Providers.all().map{it.id}.toSet()
Я получаю исключение:
java.util.ServiceConfigurationError: org.jclouds.providers.ProviderMetadata: Provider org.jclouds.aws.s3.AWSS3ProviderMetadata could not be instantiated
at java.util.ServiceLoader.fail(ServiceLoader.java:233)
at java.util.ServiceLoader.access$100(ServiceLoader.java:183)
at java.util.ServiceLoader$LazyIterator.nextService(ServiceLoader.java:392)
at java.util.ServiceLoader$LazyIterator.next(ServiceLoader.java:416)
at java.util.ServiceLoader$1.next(ServiceLoader.java:494)
at com.google.common.collect.ImmutableCollection$Builder.addAll(ImmutableCollection.java:433)
at com.google.common.collect.ImmutableCollection$ArrayBasedBuilder.addAll(ImmutableCollection.java:538)
at com.google.common.collect.ImmutableSet$Builder.addAll(ImmutableSet.java:527)
at org.jclouds.providers.Providers.all(Providers.java:83)
[... etc ....]
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1135)
Caused by: java.lang.ExceptionInInitializerError
at org.jclouds.JcloudsVersion.get(JcloudsVersion.java:153)
E/AndroidRuntime: at org.jclouds.apis.internal.BaseApiMetadata.defaultProperties(BaseApiMetadata.java:84)
at org.jclouds.apis.internal.BaseApiMetadata$Builder.(BaseApiMetadata.java:111)
at org.jclouds.rest.internal.BaseHttpApiMetadata$Builder.(BaseHttpApiMetadata.java:77)
at org.jclouds.s3.S3ApiMetadata$Builder.(S3ApiMetadata.java:100)
at org.jclouds.aws.s3.AWSS3ApiMetadata$Builder.(AWSS3ApiMetadata.java:60)
at org.jclouds.aws.s3.AWSS3ApiMetadata.(AWSS3ApiMetadata.java:44)
at org.jclouds.aws.s3.AWSS3ProviderMetadata$Builder.(AWSS3ProviderMetadata.java:113)
at org.jclouds.aws.s3.AWSS3ProviderMetadata.builder(AWSS3ProviderMetadata.java:59)
at org.jclouds.aws.s3.AWSS3ProviderMetadata.(AWSS3ProviderMetadata.java:68)
at java.lang.Class.newInstance(Native Method)
at java.util.ServiceLoader$LazyIterator.nextService(ServiceLoader.java:388)
... 42 more
Caused by: java.lang.NullPointerException: META-INF/maven/org.apache.jclouds/jclouds-core/pom.properties
at com.google.common.base.Preconditions.checkNotNull(Preconditions.java:907)
at org.jclouds.JcloudsVersion.readVersionPropertyFromClasspath(JcloudsVersion.java:87)
at org.jclouds.JcloudsVersion.(JcloudsVersion.java:82)
at org.jclouds.JcloudsVersion.(JcloudsVersion.java:77)
at org.jclouds.JcloudsVersion.(JcloudsVersion.java:48)
... 54 more
Насколько я понимаю, jclouds использует «загрузчики сервисов» Java для загрузки классов «метаданных» для каждого поставщика (AWS, Azure и т. д.). т. е. загрузчик службы загружает класс метаданных (например, org.jclouds.aws.s3.AWSS3ProviderMetadata), который реализует интерфейс org.jclouds.providers.ProviderMetadata. Поскольку этот класс метаданных должен делать все, что связано с его провайдером (включая загрузку в хранилище), это не просто проблема получения списка строк провайдера.
Итак, что же является причиной службы? проблема с загрузчиком? Куда делись мои классы метаданных? Это связано с файлами META-INF/DEPENDENCIES? Насколько я понимаю, пользовательские файлы загрузчиков служб находятся в META-INF/SERVICES. Ближайший похожий пост, который я смог найти, — это Jclouds с несколькими провайдерами, но это мне мало чем помогло, кроме выявления проблемы.
Буду очень признателен за любую помощь. Спасибо.
К вашему сведению, мой единственный импорт jclouds (в build.gradle):
implementation 'org.apache.jclouds:jclouds-allblobstore:2.6.0'
Подробнее здесь: [url]https://stackoverflow.com/questions/78495278/apache-jclouds-service-loader-error-when-used-in-android[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия