为什么 logback-classic 没有在我的 ivy 设置中下载 slf4j-api?
Why is logback-classic not downloading slf4j-api in my ivy setup?
我正在尝试使用 IvyDE 插件向 Eclipse 中的项目添加 slf4j-api
和 logback-classic
依赖项,但是我需要的 jar 没有出现在 Ivy 库类路径条目中 -我只得到 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>
Ivy 控制台说我应该 让他们出现:
[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
但是我的常春藤图书馆是这样的:
为 slf4j-api
添加单独的依赖项不会改变任何东西,但我不应该 有 添加它,因为它是 [=14= 的传递依赖项],对吧?
什么会导致 IvyDE 无法正常工作?
删除 ivy.xml 中的 conf="*->default"
部分即可。
有同样的问题并找到了根本原因,虽然我不确定为什么它在 logback-classic
的 ivy 文件中设置为这样:
<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 属性 ivy.resolve.default.type.filter
也用于同样的事情。
顺便说一句,test-jar
来自 official 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 文件。
我正在尝试使用 IvyDE 插件向 Eclipse 中的项目添加 slf4j-api
和 logback-classic
依赖项,但是我需要的 jar 没有出现在 Ivy 库类路径条目中 -我只得到 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>
Ivy 控制台说我应该 让他们出现:
[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
但是我的常春藤图书馆是这样的:
为 slf4j-api
添加单独的依赖项不会改变任何东西,但我不应该 有 添加它,因为它是 [=14= 的传递依赖项],对吧?
什么会导致 IvyDE 无法正常工作?
删除 ivy.xml 中的 conf="*->default"
部分即可。
有同样的问题并找到了根本原因,虽然我不确定为什么它在 logback-classic
的 ivy 文件中设置为这样:
<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 属性 ivy.resolve.default.type.filter
也用于同样的事情。
顺便说一句,test-jar
来自 official 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 文件。