【发布时间】:2017-02-23 15:28:56
【问题描述】:
我有以下结构的 3 个项目:
App
| |
...
| |
| +--lib
| | |
| | +--...
| |
| +--dist
|
Lib
| |
...
| |
| +--lib
| | |
| | +--sublib-1.0.jar
| |
| +--dist
| |
| +--lib-1.0.jar
|
SubLib
|
...
|
+--dist
|
+--sublib-1.0.jar
有如下关系:
App <-- Lib <-- SubLib
我正在使用 apache ivy 来检索 App 和 Lib 的依赖项。依赖关系描述如下:
ivy.xml 的Lib:
<ivy-module version = "2.0">
<info organisation = "com.test.lib" module = "lib"/>
<dependencies>
<dependency org = "com.test.sub.lib" name = "sublib" rev = "1.0" conf = "compile->default"/>
</dependencies>
</ivy-module>
ivy.xml 的App:
<ivy-module version = "2.0">
<info organisation = "com.test.app" module = "App"/>
<dependencies>
<dependency org = "com.test.lib" name = "lib" rev = "1.0" conf = "compile->default"/>
</dependencies>
</ivy-module>
ivysettings.xml:
<ivysettings>
<settings defaultResolver = "local"/>
<resolvers>
<filesystem name = "local">
<artifact pattern = "${ivy.settings.dir}/SubLib/dist/[artifact]-[revision].[ext]"/>
<artifact pattern = "${ivy.settings.dir}/Lib/dist/[artifact]-[revision].[ext]"/>
</filesystem>
</resolvers>
<modules>
<module organisation = "com.test.ivytest" resolver = "local"/>
</modules>
</ivysettings>
预期结果:在执行ivy:retrieve 后,sublib-1.0.jar 和lib-1.0.jar 都会出现在App/lib 中
实际结果:只有lib-1.0.jar 出现在App/lib 中。为App 生成的常春藤报告不包含任何提及sublib 是lib 的依赖项。在构建期间,ant + ivy 日志中也没有任何内容。
注意: lib-1.0.jar 没有被构建为 fat-jar。
我在这个配置中缺少什么?
更新
我做了一些思考,得出的唯一结论是,这个问题确实是配置错误。从没有检索传递依赖的事实来看,我们可以肯定地说,ivy 在解析lib 时没有任何类型的信息。这是有道理的,因为Lib/dist 文件夹可能位于文件系统中的任何位置。获得有关传递依赖的信息的唯一方法是将各自的ivy.xml 放在靠近那个 jar 的某个地方。哪个不是。日志[ivy:retrieve] local: no ivy file found for com.test.lib#lib;1.0: using default data 中的消息略微证实了这一点。保留信息的唯一方法是在%user%/.ivy/cache 中缓存数据。那里生成的[org]-[artifact]-[conf].xml 文件确实包含依赖信息。所以我猜要让它正常工作,我必须在应用程序的分辨率级别上使用缓存。
这有什么意义吗?还是我又明显错了?
【问题讨论】:
-
ivy:resolve 应该在检索之前调用。你得到什么错误?是否有“配置缺失”之类的东西?
-
据我所知,没有必要。我看到日志中的
[ivy:retrieve]部分确实执行了解析。我没有收到任何错误,只是缺少传递的 jar 依赖项。 -
好的(也阅读更新的部分)可以请清除常春藤缓存并再次运行它。还将您用于发布
lib和sublib的 ant 脚本添加到问题中。 -
ivy:cleancache在App.cleanant 任务期间被显式调用。只是没有提到。我目前正在测试一个想法,如果它工作正常,我会在这里发布。 -
你能显示你使用的完整的 ant 命令吗?
标签: java ant dependency-management ivy