如何删除 log4j 形式的递归依赖?

how to remove log4j form recursive dependency?

我试图从我的项目中删除 log4j 依赖项,这是一个巨大的存储库。在仔细查看 gradle 文件后,我发现其中一个模块引用了 log4j 依赖项,我在 gradle 中排除了它,如下面的代码所示 - 排除组:'log4j',模块: 'log4j'

client {
    exclude group: 'org.slf4j', module: 'slf4j-log4j12'
    exclude group: 'log4j', module: 'log4j'
    exclude group: 'org.mortbay.jetty'
}

在此之后,我 运行 搜索 log4j jar,但在整个存储库中都没有找到,这是存储库中的搜索结果 -

gunwant@devbox:bdp$ find ./ -regex ".*log4j.*\.jar"
./resources/spark/client-lib/apache-log4j-extras-1.2.17.jar
./resources/cassandra/lib/log4j-over-slf4j-1.7.25.jar
./resources/graph-server/lib/apache-log4j-extras-1.2.17.jar
./resources/log4j-appender/lib/cassandra-log4j-appender-3.1.0.jar
./dse-db/lib/log4j-over-slf4j-1.7.25.jar

但是关于 jenkins 的 FOSSA 安全报告显示了 log4j 漏洞

这就是我卡住的地方。我通过执行“gradle allDeps”再次查看存储库列出了所有依赖项,我在 hadoop 模块中发现了一个递归依赖项 -

|    |    +--- org.apache.hadoop:hadoop-auth:2.7.1.4
|    |    |    +--- org.slf4j:slf4j-api:1.7.10 -> 1.7.25
|    |    |    +--- commons-codec:commons-codec:1.4 -> 1.15
|    |    |    +--- log4j:log4j:1.2.17
|    |    |    +--- org.apache.httpcomponents:httpclient:4.4.1 -> 4.5.9 (*)
|    |    |    +--- org.apache.directory.server:apacheds-kerberos-codec:2.0.0-M15 -> 2.0.0-M24
|    |    |    |    +--- org.apache.directory.server:apacheds-i18n:2.0.0-M24
|    |    |    |    |    \--- org.slf4j:slf4j-api:1.7.25
|    |    |    |    +--- org.apache.directory.api:api-asn1-api:1.0.0 -> 1.0.3 (*)
|    |    |    |    +--- org.apache.directory.api:api-asn1-ber:1.0.0 -> 1.0.3 (*)
|    |    |    |    +--- org.apache.directory.api:api-i18n:1.0.0 -> 1.0.3
|    |    |    |    +--- org.apache.directory.api:api-ldap-model:1.0.0 -> 1.0.3 (*)
|    |    |    |    +--- org.apache.directory.api:api-util:1.0.0 -> 1.0.3 (*)
|    |    |    |    +--- net.sf.ehcache:ehcache:2.10.4
|    |    |    |    |    \--- org.slf4j:slf4j-api:1.7.7 -> 1.7.25
|    |    |    |    \--- org.slf4j:slf4j-api:1.7.25
|    |    |    +--- org.apache.zookeeper:zookeeper:3.4.6

还有动物园管理员 -

|    |    |    +--- org.apache.zookeeper:zookeeper:3.4.6
|    |    |    |    +--- org.slf4j:slf4j-api:1.6.1 -> 1.7.25
|    |    |    |    +--- log4j:log4j:1.2.16 -> 1.2.17
|    |    |    |    +--- jline:jline:0.9.94 -> 2.14.6
|    |    |    |    \--- io.netty:netty:3.7.0.Final

我的第一个问题是,为什么 FOSSA 将 log4j 报告为漏洞,即使 log4j jar 文件实际上不存在于 repo 中?我知道 FOSSA 扫描递归依赖。

我的第二个问题是,我们如何从 org.apache.hadoop 和 org.apache.zookeeper 递归依赖中排除 log4j?

我相信一定有人早先解决了这个问题。

我会在下面使用,但还要确保您添加了正确的 slf4j 库来替换界面,即。 log4j-over-slf4j

project.configurations {
        all*.exclude group: 'commons-logging', module: 'commons-logging'
        all*.exclude group: 'log4j', module: 'log4j'
        all*.exclude group: 'org.slf4j', module: 'slf4j-log4j12'
    }
    project.dependencies { 
        implementation "org.slf4j:slf4j-api"
        implementation 'org.slf4j:jcl-over-slf4j'
        implementation 'org.slf4j:log4j-over-slf4j'
    }