我的问题是,为什么我能够从公共常春藤回购中吸引一些但不是全部的依赖?
我使用ant build.xml脚本来调用ivy:retrieve命令。这是我的ivy.xml文件中的相关行,为了清楚起见,我删除了所有其他依赖项:
<dependencies>
<dependency org="log4j" name="log4j" rev="1.2.16"/>
</dependencies>
是从我的ivysettings.xml文件中提供的公共存储库中提取的
<!-- General public repository !-->
<ibiblio name="public" m2compatible="true"/>
它设法引入一些依赖关系,所以我知道它正确访问了ibiblio repos。但是,构建失败并出现以下错误:
[ivy:retrieve]
[ivy:retrieve] :: problems summary ::
[ivy:retrieve] :::: WARNINGS
[ivy:retrieve] module not found: org.slf4j#slf4j-api;${slf4j.version}
[ivy:retrieve] ==== public: tried
[ivy:retrieve] http://repo1.maven.org/maven2/org/slf4j/slf4j-api/${slf4j.version}/slf4j-api-${slf4j.version}.pom
[ivy:retrieve] -- artifact org.slf4j#slf4j-api;${slf4j.version}!slf4j-api.jar:
[ivy:retrieve] http://repo1.maven.org/maven2/org/slf4j/slf4j-api/${slf4j.version}/slf4j-api-${slf4j.version}.jar
[ivy:retrieve] ::::::::::::::::::::::::::::::::::::::::::::::
[ivy:retrieve] :: UNRESOLVED DEPENDENCIES ::
[ivy:retrieve] ::::::::::::::::::::::::::::::::::::::::::::::
[ivy:retrieve] :: org.slf4j#slf4j-api;${slf4j.version}: not found
[ivy:retrieve] ::::::::::::::::::::::::::::::::::::::::::::::
[ivy:retrieve]
[ivy:retrieve] :: USE VERBOSE OR DEBUG MESSAGE LEVEL FOR MORE DETAILS
由于某种原因,它无法获取slf4j的jar依赖项。为什么会这样?如果它有帮助,我有一个同事在他们的工作站上使用相同版本的ant和ivy运行相同的build.xml文件,并且构建对他们来说是成功的。如有必要,我可以提供有关我们开发环境的更多信息。
答案 0 :(得分:1)
如果你仔细观察控制台输出,你会看到这一点:
[ivy:retrieve] ==== public: tried
[ivy:retrieve] http://repo1.maven.org/maven2/org/slf4j/slf4j-api/${slf4j.version}/slf4j-api-${slf4j.version}.pom
[ivy:retrieve] -- artifact org.slf4j#slf4j-api;${slf4j.version}!slf4j-api.jar:
[ivy:retrieve] http://repo1.maven.org/maven2/org/slf4j/slf4j-api/${slf4j.version}/slf4j-api-${slf4j.version}.jar
[ivy:retrieve] ::::::::::::::::::::::::::::::::::::::::::::::
[ivy:retrieve] :: UNRESOLVED DEPENDENCIES ::
[ivy:retrieve] ::::::::::::::::::::::::::::::::::::::::::::::
[ivy:retrieve] :: org.slf4j#slf4j-api;${slf4j.version}: not found
[ivy:retrieve] ::::::::::::::::::::::::::::::::::::::::::::::
您尝试解决位于以下位置的资源:
[ivy:retrieve] http://repo1.maven.org/maven2/org/slf4j/slf4j-api/${slf4j.version}/slf4j-api-${slf4j.version}.pom
和$ {slf4j.version} - 是一个因某种原因未实例化的变量。可能会错过 build.properties/ivy.properties ,或者此变量应直接在 build.xml / ivy.settings / ivysettings.xml / whatever_file_define_resolve_variables.xml 中定义。 但是因为没有定义常春藤试图让资源完全位于
http://repo1.maven.org/maven2/org/slf4j/slf4j-api/${slf4j.version}/slf4j-api-${slf4j.version}.pom
而不是
http://repo1.maven.org/maven2/org/slf4j/slf4j-api/1.7.9/slf4j-api-1.7.9.pom
因此,要获得解析运行,您应该以某种方式定义名为'slf4j.version'的变量。尝试搜索如何为常春藤或蚂蚁定义变量。有不同的方法可以做到这一点。
答案 1 :(得分:0)
无法重现您的问题。
├── build.xml
├── ivysettings.xml
├── ivy.xml
└── lib
├── activation-1.1.jar
├── geronimo-jms_1.1_spec-1.0.jar
├── log4j-1.2.16.jar
├── log4j-1.2.16-javadoc.jar
├── log4j-1.2.16-sources.jar
└── mail-1.4.1.jar
<project name="demo" default="build" xmlns:ivy="antlib:org.apache.ivy.ant">
<target name="build">
<ivy:retrieve pattern="lib/[artifact]-[revision](-[classifier]).[ext]"/>
</target>
<target name="clean">
<delete dir="lib"/>
<ivy:cleancache/>
</target>
</project>
<ivy-module version="2.0">
<info organisation="com.myspotontheweb" module="demo"/>
<dependencies>
<dependency org="log4j" name="log4j" rev="1.2.16"/>
</dependencies>
</ivy-module>
<ivysettings>
<settings defaultResolver="central" />
<resolvers>
<ibiblio name="central" m2compatible="true"/>
</resolvers>
</ivysettings>