这可能更像是“我也是”,但我会尝试概述一个更完整的解决方案。我在我的产品中混合了许多来自不同来源的软件。我首先遇到了NiFi JAR的问题,然后最近又遇到了Cassandra JAR的问题。我已经在pom.xml中坚持要求在所有地方都使用相同版本的slf4j:
<slf4j.version>[1.7.25]</slf4j.version>
...
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>${slf4j.version}</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-simple</artifactId>
<version>${slf4j.version}</version>
</dependency>
... (all the slf4j JARs I needed)
然后,我告诉Maven我想要Cassandra,但不需要它带来的slf4j:
<dependency>
<groupId>org.apache.cassandra</groupId>
<artifactId>cassandra-all</artifactId>
<version>${cassandra.version}</version>
<exclusions>
<exclusion>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
</exclusion>
<exclusion>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-simple</artifactId>
</exclusion>
</dependency>
然而,像你一样,我也收到了抱怨。
Exception in thread "main" java.lang.NoSuchMethodError: org.slf4j.helpers.MessageFormatter.arrayFormat(Ljava/lang/String
at ch.qos.logback.classic.spi.LoggingEvent.<init>(LoggingEvent.java:112)
从
mvn dependency:tree 命令中,我发现我得到的是 logback 1.1.3 版本,这与 Cassandra 明显使用的版本(0.9 或类似)不匹配。因此,我通过将以下排除项添加到已有的 slf4j 排除项中来排除获取 logback:
<dependency>
<groupId>org.apache.cassandra</groupId>
<artifactId>cassandra-all</artifactId>
<version>${cassandra.version}</version>
<exclusions>
<exclusion>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
</exclusion>
<exclusion>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-simple</artifactId>
</exclusion>
<exclusion>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-core</artifactId>
</exclusion>
<exclusion>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
</exclusion>
</dependency>
...于是,我之前遇到的问题,也就是你在这里报告的问题,消失了。希望这能对某些人有所帮助。