Onejar-maven-plugin设置jar加载的顺序

时间:2013-09-19 19:05:35

标签: maven classloader slf4j logback onejar

我一直在使用库 apache-log4j-extras 进行日志记录。它包含类 org.apache.log4j.Logger

现在我必须引用一些使用 logback 的第三方库,并且其依赖项 log4j-over-slf4j (jar)。不幸的是,后面的jar还包含类 org.apache.log4j.Logger

看起来后一类是onejar类加载器首选...

我不需要 logback log4j-over-slf4j 。只想从 apache-log4j-extras 返回 org.apache.log4j.Logger 。我对Onejar-maven-plugin有什么选择?

编辑: IDEA中的调试模式似乎存在问题,而不是onejar。但问题仍然存在:我如何确保用Onejar加载需要的类?

EDIT2:例如在C#中,可以使用“extern alias”功能轻松解决。

2 个答案:

答案 0 :(得分:0)

看起来(用于IDEA中的调试模式)只需切换依赖项顺序即可解决问题。

它是怎么回事:

    <dependency>
        <groupId>my.naughty.thirdparty</groupId>
        <artifactId>thirdparty-ref-log4j-over-slf4j</artifactId>
        <version>0.50</version>
    </dependency>
    <dependency>
        <groupId>log4j</groupId>
        <artifactId>apache-log4j-extras</artifactId>
        <version>1.1</version>
    </dependency>

更改为:

    <dependency>
        <groupId>log4j</groupId>
        <artifactId>apache-log4j-extras</artifactId>
        <version>1.1</version>
    </dependency>
    <dependency>
        <groupId>my.naughty.thirdparty</groupId>
        <artifactId>thirdparty-ref-log4j-over-slf4j</artifactId>
        <version>0.50</version>
    </dependency>

但我当然不能认为它是一个强大的解决方案,特别是对于Onejar。

答案 1 :(得分:0)

为什么不排除它?

<dependency>
    <groupId>my.naughty.thirdparty</groupId>
    <artifactId>thirdparty-with-log4j-over-slf4j</artifactId>
    <version>${thirdparty.version}</version>
    <exclusions>
        <exclusion>
            <groupId>org.slf4j</groupId>
            <artifactId>log4j-over-slf4j</artifactId>
        </exclusion>
    </exclusions>
</dependency>
相关问题