【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

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