3

我正在尝试使用 IvyDE 插件向 Eclipse 中的项目添加slf4j-apilogback-classic依赖项,但我需要的 jar 没有出现在 Ivy Library 类路径条目中 - 我只是得到logback-classic-1.2.3.jar而不是得到logback-core-1.2.3.jarslf4j-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

但我的常春藤图书馆看起来像这样:

常春藤悲伤

添加单独的依赖项 forslf4j-api不会改变任何东西,但我不应该添加它,因为它是 的传递依赖项logback-classic,对吧?

什么可能导致 IvyDE 无法正常工作?

4

2 回答 2

2

有同样的问题并找到了根本原因,虽然我不确定为什么它在logback-classicivy 文件中设置为这样:

<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来自logback-classic 的官方 Maven POM文件:

<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-coreslf4j-api显式添加到您的 Ivy 文件中。

于 2018-07-31T11:22:01.537 回答
0

删除conf="*->default"ivy.xml 中的部分就可以了。

于 2018-07-03T06:52:19.300 回答