我有一个java spring Boot 应用程序A,它有依赖项B,B是第三方jar。B又有依赖项C。当人们需要升级C(比如从v1.0升级到v2.0)时,一种常见的方法是在A的pom.xml中,使用Maven排除功能将C从B中排除,然后将C-v2.0声明为直接依赖项,或者将C-v2.0添加到dependencyManagement部分。
这种方法并不能保证在所有情况下都能工作。例如org.glassfish.metro:webservices-rt:2.4.3具有依赖项woodstox-core:5.1.0,它包含高安全漏洞,需要升级到6.4.0。
我的项目A有(直接)依赖webservices-rt:2.4.3。应用上述方法并不排除我的项目中的woodstox-core:5.1.0。注意:Maven依赖项树不再显示woodstox-core:5.1.0,但Aqua Scan仍然指示webservices-rt具有依赖项woodstox-core:5.1.0。
下面是我的部分pom
<dependency>
<groupId>com.fasterxml.woodstox</groupId>
<artifactId>woodstox-core</artifactId>
<version>6.4.0</version>
</dependency>
<dependency>
<groupId>org.glassfish.metro</groupId>
<artifactId>webservices-rt</artifactId>
<version>2.4.3</version>
<exclusions>
<exclusion>
<groupId>com.fasterxml.woodstox</groupId>
<artifactId>woodstox-core</artifactId>
</exclusion>
</exclusions>
</dependency>
在我看来,上述方法是否有效取决于B罐是如何 Package 的。有人有知识分享吗?
1条答案
按热度按时间oyjwcjzk1#
1.更好的方法是在
<dependencyManagement>
中设置所需的版本,即那你就根本不需要排除。
1.如果依赖关系树没有显示它,它将不会被使用,除非依赖关系是一个fat jar。所以,避免fat jar作为依赖关系(如果可能的话),并进一步检查你的Aqua Scan是否做错了。