如何从项目中删除 commons-beanutils-core

How to remove commons-beanutils-core from a project

背景

commons-beanutils-core 1.8.0 版有一些我试图避免的安全问题。 所以,我正在使用 commons-beanutils 1.9.4

问题

我似乎无法阻止其他库导入 commons-beanutils-core 1.8.0 版。我的 pom 文件中没有任何地方包含它。我假设其他一些依赖隐含地包含它。而且,由于 commons-beanutils-core 不再受支持,并且他们已经转向仅对所有较新版本使用 commons-beanutils,当我明确写道:

    <dependency>
        <groupId>commons-beanutils</groupId>
        <artifactId>commons-beanutils</artifactId>
        <version>1.9.4</version>
    </dependency>

它不会删除对 commons-beanutils-core 的隐式引用。

问题

如何让其他软件包不下载 commons-beanutils-core 版本 1.8.0?

备注:

还有其他包作为依赖项下载,我没有明确包含在我的 pom.xml 中。扫描显示其中一些包存在安全风险。因此,我的解决方案是明确地包含以前隐式包含的包的更高版本。并且删除了旧版本的包。但是这个解决方案在这里不起作用,因为 commons-beanutils-core 在最新版本中不再使用。

更新 1

我了解到包含以下代码将使 pom.xml 认为将提供 1.8.0,并且在某种意义上它会提供,因为我将包含 1.9.4。但我不确定代码是否会使用 1.9.4,如果它认为它应该寻找 1.8.0。此代码使我能够删除 1.8.0,但我不知道我在这里的欺骗是否会导致问题。

    <dependency>
        <groupId>commons-beanutils</groupId>
        <artifactId>commons-beanutils-core</artifactId>
        <version>1.8.0</version>
        <scope>provided</scope>
    </dependency>

使用提供的作用域会对运行时产生副作用。如果范围依赖项在编译中使用但未打包,那么如果 commons-beanutils-core 具有 commons-beanutils 中不存在的方法,您将得到 NoSuchMethodException.

更好的解决方案是使用 mvn dependency:tree 来查找哪些依赖项依赖于 commons-beanutils-core

  1. 要么将依赖项更新为使用 commons-beanutils1.9.4 版本的版本。

  2. 或使用exclusion从使用commons-beanutils-core作为依赖项的依赖项中排除commons-beanutils-core

如果可以使用方法一,如果找不到使用最新版本的依赖,则使用方法二更好。