Почему при попытке использовать ScalaTest появляется сообщение «Не удалось инициализировать класс org. apache .logging.log4j.LogManager»? - PullRequest
0 голосов
/ 20 апреля 2020

У меня есть простой Scala класс, использующий slf4j ...

class BasicHandler[T] extends FutureCallback[T] with Logging{
  val latch = new CountDownLatch(1)
  override def cancelled(): Unit = {
    logger.debug("Request cancelled")
    this.latch.countDown();
  }
  ...
}

Это компилируется и отлично работает с mvn clean deploy. Однако когда я пытаюсь написать такой тест ...

"Future" should "unlatch on cancel" in {
    assert(obj.latch.getCount == 0)
    obj.cancelled();
    obj.latch.await()
    assert(obj.latch.getCount == 1)
}

я получаю ...

java .lang.NoClassDefFoundError: Не удалось инициализировать класс org . apache .logging.log4j.LogManager

Что мне не хватает?

Мои зависимости включают ...

    <dependency>
        <groupId>org.apache.logging.log4j</groupId>
        <artifactId>log4j-slf4j-impl</artifactId>
        <version>2.10.0</version>
        <exclusions>
            <exclusion>
                <groupId>org.apache.logging.log4j</groupId>
                <artifactId>log4j-core</artifactId>
            </exclusion>
        </exclusions>
    </dependency>
    <dependency>
        <groupId>org.apache.logging.log4j</groupId>
        <artifactId>log4j-api-scala_2.12</artifactId>
        <version>${scala.log4j}</version>
        <exclusions>
            <exclusion>
                <groupId>org.scala-lang</groupId>
                <artifactId>scala-reflect</artifactId>
            </exclusion>
            <exclusion>
                <groupId>org.scala-lang</groupId>
                <artifactId>scala-library</artifactId>
            </exclusion>
        </exclusions>
    </dependency>
    <dependency>
        <groupId>org.apache.logging.log4j</groupId>
        <artifactId>log4j-api</artifactId>
        <version>${log4japi.version}</version>
    </dependency>
    <dependency>
        <groupId>org.apache.logging.log4j</groupId>
        <artifactId>log4j-core</artifactId>
        <version>${log4j.version}</version>
    </dependency>

1 Ответ

0 голосов
/ 20 апреля 2020

Изменены зависимости, чтобы они выглядели так (удалены другие зависимости)

    <dependency>
        <groupId>org.apache.logging.log4j</groupId>
        <artifactId>log4j-api</artifactId>
        <version>${log4japi.version}</version>
    </dependency>
    <dependency>
        <groupId>org.apache.logging.log4j</groupId>
        <artifactId>log4j-core</artifactId>
        <version>${log4j.version}</version>
        <exclusions>
            <exclusion>
                <groupId>org.apache.logging.log4j</groupId>
                <artifactId>log4j-api</artifactId>
            </exclusion>
        </exclusions>
    </dependency>

Кажется, что log4j-api-scala_2.12 не поддерживается с 2017 года, поэтому я вернулся к этому ...

val logger = LogManager.getLogger(classOf[BasicConsumer]);
...