我的POMEH2缓存中有依赖项

        <dependency>
            <groupId>net.sf.ehcache</groupId>
            <artifactId>ehcache</artifactId>
            <version>${ehcache.version}</version>
        </dependency>

问题在于,在应用程序构建过程中,我们对漏洞进行了grype判断,并检测到该依赖关系中的几个库:

NAME              INSTALLED         FIXED-IN  VULNERABILITY        SEVERITY 
jackson-databind  2.11.1            2.12.6.1  GHSA-57j2-w4cx-62h2  High      
jersey-common     2.31              2.34      GHSA-c43q-5hpj-4crv  Medium    
jetty-server      9.4.39.v20210325  9.4.41    GHSA-m6cp-vxjx-65j6  Low

这有点让人困惑,因为库是以一种非常奇怪的方式添加到ehcache jar的——不像依赖项,而是扩展名为*的文件."rest管理专用类路径"文件夹中的class_terracotta,如图所示

由于这种方法,库版本不能在pom文件中被覆盖或排除.

可能正确的方法是从Ehcache2迁移到3,但这可能需要一些时间,我想知道是否有什么快速的解决方案可以将这个库从EhcacheJAR中排除,或者覆盖它们的版本?

附笔.

    <dependency>
      <groupId>net.sf.ehcache</groupId>
      <artifactId>ehcache</artifactId>
      <version>2.10.4</version>
      <type>pom</type>
    </dependency>

但是如果我在我的pom缓存管理器中把它改成这种类型,我会得到这个错误

Error starting Tomcat context. Exception: org.springframework.beans.factory.UnsatisfiedDependencyException. Message: Error creating bean with name 'sessionRepositoryFilterRegistration' defined in class path resource [org/springframework/boot/autoconfigure/session/SessionRepositoryFilterConfiguration.class]: Unsatisfied dependency expressed through method 'sessionRepositoryFilterRegistration' parameter 1; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'org.springframework.boot.autoconfigure.session.JdbcSessionConfiguration$SpringBootJdbcHttpSessionConfiguration': Unsatisfied dependency expressed through method 'setTransactionManager' parameter 0; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'transactionManager' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Initialization of bean failed; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: 'entityManagerFactory' depends on missing bean 'cacheManager'; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named 'cacheManager' available

推荐答案

有时库工件以多种方式发布.

单向打包所有需要的依赖项,这样就可以按原样使用,而无需添加额外的依赖项.这方面的挑战正是您在这里观察到的——这些嵌入式依赖项不能被排除或更改.org.hamcrest:hamcrest-all就是一个例子.

有些库还有一个"更轻"的版本——只包含特定工件的类等.然后,我们可以显式地添加其他依赖项以获得所需的功能——我们完全可以控制使用的版本等.org.hamcrest:hamcrest-coreorg.hamcrest:hamcrest-libraryhamcrest-all的部分替代品(可能需要更多依赖项才能获得-all版本提供的完整功能).

就我个人而言,我更喜欢第二种方法,因为遇到的问题很难找到和调试.

因此,这里的修复方法是查看是否有Ehcache版本2的"轻"版本,并切换到它(以及核心功能所需的任何其他依赖项).

如果没有,并且您绝对无法切换到版本3,那么您可以继续使用maven-shade-plugin来重建ehcache jar,过滤掉额外的依赖项.我强烈建议不要这样做,因为谁想在每次版本更新时重建ehcache jar?而且(现在已经损坏的)库即使不太可能也有可能无法正常工作.此外,它还必须手动上传到团队的工件库中,最好使用分类器或不同的组ID,以明确这不是正式版本.如果所有这些都让你头晕目眩,那么这就是升级的一个很好的理由.:)

Java相关问答推荐

为什么我们仍然需要实现noArgsConstructor如果Java默认提供一个非参数化的构造函数?''

neo4j java驱动程序是否会在错误发生时自动回滚事务?

取消按钮,但没有任何操作方法引发和异常

Java List with all combinations of 8 booleans

SpringBootreact 式Web应用程序的Spring Cloud Configer服务器中的资源控制器损坏

如何使用Maven和Spring Boot将构建时初始化、跟踪类初始化正确传递到本机编译

如何正确创建序列图?

如何使用值中包含与号的查询参数创建一个java.net.URI

第三方Jar pom.xml

生成桥方法以解决具有相同擦除的冲突方法

Spring Framework6.1中引入的新RestClient是否有适合于测试的变体,就像RestTemplate和TestRestTemplate一样?

STREAMS减少部分结果的问题

使用迭代器遍历HashMap不会因IF条件而停止

RestTemplate Bean提供OkHttp3ClientHttpRequestFactory不支持Spring Boot 3中的请求正文缓冲

为什么JavaFX MediaPlayer音频播放在Windows和Mac上运行良好,但在Linux(POPOS/Ubuntu)上却有问题?

Java中的一个错误';s stdlib SocksSocketImpl?

使用StringBuilder和append方法创建字符串时Java字符串内部方法的问题

java.util.LinkedList()是如何成为MutableList的实例的?

如何在Java中正确实现填字游戏求解器

Java ModbusRTU写寄存器