【问题标题】:Avoid log4j-to-slf4j to download automatically避免 log4j-to-slf4j 自动下载
【发布时间】:2022-01-03 14:35:42
【问题描述】:

我有一个项目,其中 log4j-to-slf4j-2.17.1.jar 作为依赖项的一部分自动下载。我也添加了排除标签。但是maven还在下载它。

需要注意的是,我在 pom.xml 的属性标签中指定了 log4j2 版本。它正在下载 log4j-api-2.17.1.jar(这是预期的)以及 log4j-to-slf4j-2.17.1.jar(这不是必需的)。

有什么办法可以解决这个问题吗?请注意,我检查过该 jar 在类路径中也不可用。

pom.xml 中的排除

<dependency>
    <groupId>org.apache.logging.log4j</groupId>
    <artifactId>log4j-api</artifactId>
    <exclusions>
        <exclusion>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-to-slf4j</artifactId>
            <version>2.17.1</version>
        </exclusion>
    </exclusions>
</dependency>

类路径

<?xml version="1.0" encoding="UTF-8"?>
<classpath>
    <classpathentry kind="src" output="target/classes" path="src/main/java">
        <attributes>
            <attribute name="optional" value="true"/>
            <attribute name="maven.pomderived" value="true"/>
        </attributes>
    </classpathentry>
    <classpathentry excluding="**" kind="src" output="target/classes" path="src/main/resources">
        <attributes>
            <attribute name="maven.pomderived" value="true"/>
        </attributes>
    </classpathentry>
    <classpathentry kind="src" output="target/test-classes" path="src/test/java">
        <attributes>
            <attribute name="optional" value="true"/>
            <attribute name="maven.pomderived" value="true"/>
            <attribute name="test" value="true"/>
        </attributes>
    </classpathentry>
    <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8">
        <attributes>
            <attribute name="maven.pomderived" value="true"/>
        </attributes>
    </classpathentry>
    <classpathentry kind="con" path="org.eclipse.m2e.MAVEN2_CLASSPATH_CONTAINER">
        <attributes>
            <attribute name="maven.pomderived" value="true"/>
        </attributes>
    </classpathentry>
    <classpathentry kind="output" path="target/classes"/>
</classpath>

【问题讨论】:

  • dependency.exclusions.exclusion.version 不是多余的吗?
  • 我确实浏览了一些文档和 SO 答案。我看到它在那里被使用。这就是我继续使用它的原因。蓬松你还有其他选择吗?
  • 嗯,我不认为有办法不下载它,tbh。
  • 这篇描述的 pom sn-p 帖子是完全错误的,因为排除不允许 &lt;version&gt;..&lt;/version&gt; 标签...除了 log4j-api 不依赖于 log4j-to-slf4j 所以排除根本没有任何意义..此外,如果没有整个依赖关系树,就不可能猜测依赖关系来自哪里......
  • 我确实先检查了没有版本标签的 khmarbaise。在确认版本没有版本之后,我只是在添加版本标签时尝试了运气。

标签: java maven


【解决方案1】:

log4j-api 不依赖于 log4j-to-slf4j,因此在 log4j-api 中添加排除项不会做任何事情。

使用mvn dependency:tree 并检查哪个直接依赖项将log4j-to-slf4j 作为传递依赖项,然后在其中添加排除项,排除项中也不需要版本,因为对工件只有一个版本的依赖项。

【讨论】:

  • 有道理的 Karthik。使用此命令找到正确的路径。
猜你喜欢
  • 2016-02-22
  • 2020-07-13
  • 1970-01-01
  • 2015-11-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-12-27
相关资源
最近更新 更多