【AWS】NoSuchFieldError: SIGNING_REGION

Exception in thread “main” java.lang.NoSuchFieldError: SIGNING_REGION

近期在工作中,使用AWS提供的SDK包從S3桶下載文件時,遇到了如下的異常情況:
在這裏插入圖片描述
當時pom文件配置爲:

		<dependency>
            <groupId>com.amazonaws</groupId>
            <artifactId>aws-java-sdk-s3</artifactId>
            <version>1.11.760</version>
        </dependency>

後通過上網查詢,發現是因爲幾個AWS包的版本不一致的問題:

參考的資料:https://github.com/aws/aws-sdk-java/issues/1700
https://stackoverflow.com/questions/49085110/error-in-using-aws-java-sdk-s3

通過IDEA查看,確實發現幾個包的版本不同。
在這裏插入圖片描述
後面通過在pom文件中,指定幾個包的版本爲一致後,發現可成功的調用。
在這裏插入圖片描述
問題本來到此結束,但是後面我發現,我在另外一個項目中,同樣使用相同的pom文件,但是在另外的項目中,導入的包,默認就是同一版本:
在這裏插入圖片描述
因此,懷疑是原項目的pom文件其他地方同樣也引入了AWS包的依賴。後面經過定位,發現是在dependencyManagement標籤中,引入了SpringCloud的包:

    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>Edgware.SR6</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

而SpringCloud的包指定了特定的AWS依賴版本:

			<dependency>
				<groupId>org.springframework.cloud</groupId>
				<artifactId>spring-cloud-aws-dependencies</artifactId>
				<version>${spring-cloud-aws.version}</version>
				<type>pom</type>
				<scope>import</scope>
			</dependency>

而該版本,正好是之前出現的1.11.125的版本。

dependencyManagement版本優先級高於傳遞依賴版本,因此在前面雖然指定了aws-java-sdk-s3包的版本,但是裏面傳遞依賴的其他aws的包的版本被dependencyManagement中指定的版本所覆蓋,導致了實際導入包的版本與預期不符的情況。

dependencyManagement依賴版本優先級參考:https://blog.csdn.net/jiaobuchong/article/details/81842503

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章