Alibaba Cloud Object Storage OSS 依存関係の使用エラー問題に対する一時的な解決策 (恒久的な解決策はすでに利用可能です)

永続的な解決策:「Alibaba Cloud Object Storage OSS の奇妙な異常の隠れた理由」を参照してください。 (2021-01-06 更新)

--------------------------以下は原文です:-------------- ------- ---------
現在、Alibaba Cloud OSS を使用する場合、使用できるバージョンの組み合わせは次のとおりです。
Spring Cloud:Hoxton.SR8;
Spring Boot:2.3.7 .RELEASE;
spring-cloud-alibaba-dependency:2.2.0.RELEASE;< a i=11> spring-cloud-starter-alicloud-oss:2.2.0.RELEASE (このバージョン番号は指定する必要はありません); MyBatis Plus: 3.4.1; JDK: 11.0.9; ナコス: 1.4.0 アプリケーションを開始する前に、spring-cloud-starter-alicloud-oss の依存関係をコメント アウトします。アプリケーションが正常に起動したら、依存関係のコメントを解除し、OSS ファイルのアップロード機能を使用します。 具体的な方法: に関するこの記事の内容です。これが一時的であると言われる理由は、このソリューションではアプリケーションの起動と OSS へのファイルのアップロードが同時に成功することを保証できないためです。 一時的な解決策 これが、





------------------------------------------ ---強制分割行------------------------------------------ ----
以下は、テスト プロセス中の例外レコードの一部です。
公式 github プロジェクトの例によると " Alibaba Cloud Spring Boot OSS Simple」 では、aliyun-oss-spring-boot-starter を pom.xml 依存関係に追加します。例は次のとおりです。

<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>aliyun-oss-spring-boot-starter</artifactId>
</dependency>

そして、application.properties にアクセスキー、シークレットキー、エンドポイントを追加します。

alibaba.cloud.access-key=LT***t
alibaba.cloud.secret-key=xi***UZ
alibaba.cloud.oss.endpoint=oss-cn-beijing.aliyuncs.com

アプリケーションの起動をテストしました。起動に失敗しました。いくつかの例外は次のとおりです。

    2021-01-03 21:51:58.864 ERROR 16672 --- [           main] o.s.boot.SpringApplication               : Application run failed

    java.lang.IllegalStateException: Error processing condition on com.alibaba.alicloud.context.oss.OssContextAutoConfiguration.ossClient
        at org.springframework.boot.autoconfigure.condition.SpringBootCondition.matches(SpringBootCondition.java:60) ~[spring-boot-autoconfigure-2.3.7.RELEASE.jar:2.3.7.RELEASE]
        at org.springframework.context.annotation.ConditionEvaluator.shouldSkip(ConditionEvaluator.java:108) ~[spring-context-5.2.12.RELEASE.jar:5.2.12.RELEASE]

    Caused by: java.lang.IllegalStateException: @ConditionalOnMissingBean did not specify a bean using type, name or annotation and the attempt to deduce the bean's type failed
	at org.springframework.boot.autoconfigure.condition.OnBeanCondition$Spec.validate

    java.lang.NoClassDefFoundError: com/aliyun/oss/OSS
	at com.alibaba.alicloud.oss.OssApplicationListener.onApplicationEvent(OssApplicationListener.java:41) ~[spring-cloud-alicloud-oss-2.2.0.RELEASE.jar:2.2.0.RELEASE]
	at com.alibaba.alicloud.oss.OssApplicationListener.onApplicationEvent(OssApplicationListener.java:34) ~[spring-cloud-alicloud-oss-2.2.0.RELEASE.jar:2.2.0.RELEASE]

    Caused by: java.lang.ClassNotFoundException: com.aliyun.oss.OSS
	at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:581) ~[na:na]
	at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178) ~[na:na]
	at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:521) ~[na:na]
	... 16 common frames omitted

少し検索した結果、この記事で発生した問題と一致する次の 2 つのブログ投稿を見つけました。
「aliyun-oss-spring-boot をインポートする際の不明なエラーの解決」 -starter インポート依存関係"
"aliyun-oss-spring-boot-starter インポート エラーの問題を解決する"
aliyun-spring-boot-dependency 依存関係をdependencyManagement (以下に示すように):

<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>aliyun-spring-boot-dependencies</artifactId>
            <version>1.0.0</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>

開始しようとしましたが、 まだエラーが報告されました。その後、上記の解決策に反対する記事を目にしました。
「com.alibaba.cloud:aliyun-oss-spring-boot-starter:unknown file Upload error aliCloudEdasSdk を解決できない解決策」 a> a> ため、古いソリューションが採用されました。つまり、次の依存関係を pom.xml に追加します。 「aliyun-oss-spring-boot-starter 依存関係エラーのレポートをインポートしています。com.alibaba.cloud:aliyun-oss-spring-boot-starter を解決できません」 :unknown Solution》
再結合

<dependency>
	<groupId>com.alibaba.cloud</groupId>
	<artifactId>spring-cloud-starter-alicloud-oss</artifactId>
</dependency>

次に、application.yml に追加します。

spring:
  datasource:
    username: ***
    password: ***
    url: jdbc:mysql://192.****:3306/***
    driver-class-name: com.mysql.cj.jdbc.Driver
  cloud:
    nacos:
      discovery:
        server-addr: 127.0.0.1:8848
    alicloud:
      access-key: L***t
      secret-key: x***Z
      oss:
        endpoint: oss-cn-beijing.aliyuncs.com

この時点でも、アプリケーションを起動すると、 はまだ失敗し、エラーは上記と同じです。ただし、現時点では、OSS アップロード ファイルをテストすると、正常にアップロードできます。ただし、以下で詳しく説明するように、他にもいくつかの異常があります。

测试文件上传成功!
java.lang.NoClassDefFoundError: org/junit/jupiter/api/extension/TestInstancePreDestroyCallback
	at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.invokeTestInstancePreDestroyCallbacks(TestMethodTestDescriptor.java:259)
	at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.execute(TestMethodTestDescriptor.java:145)
	at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.execute(TestMethodTestDescriptor.java:71)
	at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$5(NodeTestTask.java:135)
	at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
	at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$7(NodeTestTask.java:125)
	at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:135)
	at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:123)
	at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
	at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:122)
	at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:80)
	at java.base/java.util.ArrayList.forEach(ArrayList.java:1541)
	at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:38)
	at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$5(NodeTestTask.java:139)
	at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
	at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$7(NodeTestTask.java:125)
	at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:135)
	at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:123)
	at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
	at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:122)
	at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:80)
	at java.base/java.util.ArrayList.forEach(ArrayList.java:1541)
	at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:38)
	at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$5(NodeTestTask.java:139)
	at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
	at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$7(NodeTestTask.java:125)
	at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:135)
	at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:123)
	at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
	at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:122)
	at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:80)
	at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:32)
	at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57)
	at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:51)
	at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:248)
	at org.junit.platform.launcher.core.DefaultLauncher.lambda$execute$5(DefaultLauncher.java:211)
	at org.junit.platform.launcher.core.DefaultLauncher.withInterceptedStreams(DefaultLauncher.java:226)
	at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:199)
	at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:132)
	at com.intellij.junit5.JUnit5IdeaTestRunner.startRunnerWithArgs(JUnit5IdeaTestRunner.java:69)
	at com.intellij.rt.execution.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:47)
	at com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:242)
	at com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:70)
Caused by: java.lang.ClassNotFoundException: org.junit.jupiter.api.extension.TestInstancePreDestroyCallback
	at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:581)
	at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178)
	at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:521)
	... 43 more

その後、アプリケーションの起動と OSS へのファイルのアップロードの問題を解決しようと何度も試みましたが、同時には成功しませんでした。変更された spring-cloud-starter-alicloud-oss は、 指定されたバージョン番号2.2.0.RELEASEに依存しますが、完全な解決策はまだ見つかっていません。 。絶望的な状況では、冒頭で述べた一時的な解決策を使用するしかありません。
後でさらに最適化されたソリューションを見つけられることを願っています。

おすすめ

転載: blog.csdn.net/shinyolive/article/details/112160259