Java NoSuchMethodError:org.apache.log4j.ConsoleAppender.(Lorg/apache/log4j/Layout;)

Java NoSuchMethodError:org.apache.log4j.ConsoleAppender.(Lorg/apache/log4j/Layout;),java,spring,maven,Java,Spring,Maven,我有一个maven项目,包含jdk:1.8、spring boot:1.5.4.RELEASE、spring:4.3.9.RELEASE和一些供应商依赖项。项目生成并运行,但当我访问供应商软件包使用的资源时,会出现以下异常: java.lang.NoSuchMethodError: org.apache.log4j.ConsoleAppender.<init>(Lorg/apache/log4j/Layout;)V at bkLogPkg.SingletonLog.<i

我有一个maven项目,包含jdk:1.8、spring boot:1.5.4.RELEASE、spring:4.3.9.RELEASE和一些供应商依赖项。项目生成并运行,但当我访问供应商软件包使用的资源时,会出现以下异常:

java.lang.NoSuchMethodError: org.apache.log4j.ConsoleAppender.<init>(Lorg/apache/log4j/Layout;)V
    at bkLogPkg.SingletonLog.<init>(SingletonLog.java:19) ~[VendorComLib.jar:na]
    at Vendor.ConnectionBasket.<init>(ConnectionBasket.java:31) ~[VendorServices.jar:na]
    at Vendor.ConnectionBasketInterface.Loader(ConnectionBasketInterface.java:450) ~[VendorServices.jar:na]
    at Vendor.ConnectionBasketInterface.<init>(ConnectionBasketInterface.java:251) ~[VendorServices.jar:na]

...
它试图将方法从供应商jar文件调用到log4j1.2.14.jar文件,但它无法这样做。我在pom.xml文件中添加了供应商依赖项

pom.xml: http://maven.apache.org/xsd/maven-4.0.0.xsd> 4.0.0

<groupId>com.sample</groupId>
<artifactId>angular2-spring</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>war</packaging>

<name>angular2-spring</name>
<description>Angular 2 application with Spring 4</description>

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>1.5.4.RELEASE</version>
    <relativePath/> <!-- lookup parent from repository -->
</parent>

<properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
    <java.version>1.8</java.version>
    <org.slf4j-version>1.2.14</org.slf4j-version>
</properties>

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-tomcat</artifactId>
        <scope>provided</scope>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-devtools</artifactId>
    </dependency>

    <!-- Vendor dependencies from Local Repository -->
    <dependency>
        <groupId>Vendor</groupId>
        <artifactId>log4j</artifactId>
        <version>1.2.14</version>
    </dependency>
    <dependency>
        <groupId>Vendor</groupId>
        <artifactId>VendorServiceAuth</artifactId>
        <version>1.0.0</version>
    </dependency>
    <dependency>
        <groupId>Vendor</groupId>
        <artifactId>VendorServices</artifactId>
        <version>1.0.0</version>
    </dependency>
    <dependency>
        <groupId>Vendor</groupId>
        <artifactId>VendorComLib</artifactId>
        <version>1.0.0</version>
    </dependency>
    <dependency>
        <groupId>Vendor</groupId>
        <artifactId>VendorHeaderClass</artifactId>
        <version>1.0.0</version>
    </dependency>

</dependencies>

<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
        </plugin>
    </plugins>
</build>

我也遇到过类似的问题,通过确保我使用的版本是最新的,并且与代码的其余部分兼容,我所有的问题都得到了解决。对于您的问题,看起来.jar是专门为兼容而构建的,所以我怀疑这是问题所在。根据手头的信息,我唯一能想到的是:

一,。尝试确保使用的所有.jar都是最新版本。有时,如果您的其他.jar没有完全更新,那么在尝试从前面版本的.jar访问方法时,它们可能会抛出错误/异常


二,。如果1不这样做,请尝试在IDE中使用依赖项导入函数。我曾多次遇到Maven只是因为IDE兼容性而导致奇怪错误的情况。从依赖项菜单导入所有.jar也会有所帮助

我今天也有同样的问题。我花了几个小时才找到原因

您只是与log4j jar有冲突

解决这一问题的快速方法是:

<dependency>
    <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
        <exclusions>
            <exclusion>
                <groupId>org.slf4j</groupId>
                <artifactId>log4j-over-slf4j</artifactId>
            </exclusion>
        </exclusions>
</dependency>
如果确实需要log4j,则添加依赖项:

<dependency>
        <groupId>log4j</groupId>
        <artifactId>log4j</artifactId>
        <version>1.2.17</version>
    </dependency>

您可以查看以了解详细信息。

我在Dependency菜单中导入了jar,但我无法更新log4j jar,因为我的供应商jar依赖于旧版本的log4j。如果是这样,我可以想到的是,请确保您使用的log4j版本是正确的旧版本。请注意,过时的.jar很容易出现这样的问题。如果这不是问题,我建议尝试寻找一个供应商的替代品。jar的东西更新到当前版本。好吧,这是正确的版本,正如你所看到的,上面我使用的是供应商提供的log4jjar文件,它在我的控制台项目中工作,但当我在web应用程序中使用它时,它失败了。我必须手动将该文件包括在我的项目构建路径中才能正常工作。我不明白,我在pom.xml中有一个文件,它在maven库下的项目构建路径中添加了jar文件,但它不起作用,但当我手动将jar文件添加到构建路径时,它起作用了!