Почему logback-classic не загружает slf4j-api в моей настройке ivy? - PullRequest
0 голосов
/ 30 июня 2018

Я пытаюсь добавить зависимости slf4j-api и logback-classic к проекту в Eclipse, используя плагин IvyDE, но нужные мне файлы не отображаются в записи пути к классам Ivy Library - я только получаю logback-classic-1.2.3.jar вместо того, чтобы также получить logback-core-1.2.3.jar и slf4j-api-1.7.25.jar.

Мой ivy.xml выглядит так:

<ivy-module version="2.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://ant.apache.org/ivy/schemas/ivy.xsd">
    <info organisation="foo" module="bar" status="integration"/>
    <dependencies>
        <dependency org="ch.qos.logback" name="logback-classic" rev="1.2.3" conf="*->default"/>
    </dependencies>
</ivy-module>

Консоль Айви говорит, что я должен заставить их появиться:

[IvyDE] Resolve job starting...
[IvyDE] Processing resolve request ivy.xml[*] in test-ivyde
[IvyDE] 1 module(s) to resolve outside the workspace
[IvyDE] Resolving ivy.xml[*] in test-ivyde
:: resolving dependencies :: foo#bar;working@k
    confs: [default]
    found ch.qos.logback#logback-classic;1.2.3 in public
    found ch.qos.logback#logback-core;1.2.3 in public
    found org.slf4j#slf4j-api;1.7.25 in public
:: resolution report :: resolve 14ms :: artifacts dl 2ms
    ---------------------------------------------------------------------
    |                  |            modules            ||   artifacts   |
    |       conf       | number| search|dwnlded|evicted|| number|dwnlded|
    ---------------------------------------------------------------------
    |      default     |   3   |   0   |   0   |   0   ||   3   |   0   |
    ---------------------------------------------------------------------
[IvyDE] Successuful resolve of ivy.xml[*] in test-ivyde

Но моя библиотека Ivy выглядит так:

ivyde sadness

Добавление отдельной зависимости для slf4j-api ничего не меняет, но я не должен иметь , чтобы добавить ее, поскольку это транзитивная зависимость logback-classic, верно?

Что может заставить IvyDE работать не так, как я думаю?

Ответы [ 2 ]

0 голосов
/ 31 июля 2018

Возникла та же проблема и была найдена основная причина, хотя я не уверен, почему она была установлена ​​так в файле плюща logback-classic:

<artifact name="logback-core" type="test-jar" ext="jar" conf="" m:classifier="tests"/>
<artifact name="slf4j-api" type="test-jar" ext="jar" conf="" m:classifier="tests"/>

Проблемная часть - это type="test-jar", где у вас обычно есть "jar" (я также нашел type="bundle" для com.google.guava#guava).

Эффект добавления этого типа можно увидеть, сравнив эти две команды:

java -jar ivy-2.5.0-rc1.jar -confs default -dependency ch.qos.logback logback-classic 1.2.3 -retrieve "[conf]-[type]-[artifact]-[revision].[ext]" -types jar
java -jar ivy-2.5.0-rc1.jar -confs default -dependency ch.qos.logback logback-classic 1.2.3 -retrieve "[conf]-[type]-[artifact]-[revision].[ext]" -types jar test-jar

Первый получает 1 артефакт, а второй получает все 3, как и ожидалось. Кроме того, свойство плюща ivy.resolve.default.type.filter используется для того же самого.

Кстати, test-jar происходит от официального файла Maven POM для logback-classic:

<dependency>
    <groupId>ch.qos.logback</groupId>
    <artifactId>logback-core</artifactId>
    <type>test-jar</type>
    <scope>test</scope>
</dependency>
<dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-api</artifactId>
    <type>test-jar</type>
    <version>${slf4j.version}</version>
    <scope>test</scope>
</dependency>

Вы также можете отключить транзитивную проверку зависимостей, добавив transitive="false" к logback-classic записи, а затем явно добавив logback-core и slf4j-api в свой файл Ivy.

0 голосов
/ 03 июля 2018

Удалите conf="*->default" часть в ivy.xml, и это будет сделано.

...