如何使用不同的分类器在 Ivy 中下载多个 Maven 依赖项?
Posted
技术标签:
【中文标题】如何使用不同的分类器在 Ivy 中下载多个 Maven 依赖项?【英文标题】:How to dowload multiple Maven dependencies in Ivy with different classifiers? 【发布时间】:2011-12-09 21:28:18 【问题描述】:我正在尝试依赖 Ivy 中的 Neo4j server jar 和 Neo4j server jar - static-web.jar。我正在尝试类似的东西
<ivy-module version="2.0" xmlns:m="http://ant.apache.org/ivy/maven">
<info organisation="org.jimwebber" module="neo4j-koans"/>
<dependencies>
<dependency org="org.springframework.data" name="spring-data-neo4j" rev="1.0.0.RELEASE">
<exclude module="jms"/>
<exclude module="jmxtools"/>
<exclude module="jmxri"/>
<exclude org="org.slf4j" name="slf4j-log4j12"/>
</dependency>
<dependency org="org.aspectj" name="aspectjrt" rev="1.6.11.RELEASE"/>
<dependency org="org.aspectj" name="aspectjtools" rev="1.6.11.RELEASE"/>
<dependency org="org.neo4j.app" name="neo4j-server" rev="1.5-SNAPSHOT" m:classifier="static-web"/>
<dependency org="org.neo4j.app" name="neo4j-server" rev="1.5-SNAPSHOT"/>
<dependency org="org.neo4j" name="neo4j-community" rev="1.5-SNAPSHOT"/>
<dependency org="org.neo4j" name="neo4j-shell" rev="1.5-SNAPSHOT"/>
<dependency org="org.codehaus.jackson" name="jackson-core-asl" rev="1.7.5"/>
<dependency org="org.codehaus.jackson" name="jackson-mapper-asl" rev="1.7.5"/>
<dependency org="com.sun.jersey" name="jersey-client" rev="1.3"/>
<dependency org="org.mockito" name="mockito-all" rev="1.8.5"/>
<dependency org="junit" name="junit" rev="4.7"/>
</dependencies>
</ivy-module>
但我从来没有把“staic-web”.jar 弄下来,现在也出错了。有人知道怎么做吗?
感谢任何提示!
/彼得
【问题讨论】:
这可能很有趣:***.com/questions/6690544/… 【参考方案1】:这是您检索多个与 Maven 模块关联的工件的方式:
<dependency org="org.neo4j.app" name="neo4j-server" rev="1.5-SNAPSHOT">
<artifact name="neo4j-server" type="jar" />
<artifact name="neo4j-server" type="jar" m:classifier="static-web"/>
</dependency>
由于 Maven 使用分类器引用其他工件的方式,语法很奇怪。
neo4j 快照存储库需要添加到您的 ivysettings.xml 文件中(快照版本不会发布到 Maven Central)
<ivysettings>
<settings defaultResolver="chain"/>
<resolvers>
<chain name="chain">
<ibiblio name="central" m2compatible="true"/>
<ibiblio name="neo4j-snapshot" m2compatible="true" root="http://repo.neo4j.org/content/repositories/snapshots"/>
</chain>
</resolvers>
</ivysettings>
其他问题
版本修正
<dependency org="org.aspectj" name="aspectjrt" rev="1.6.11"/>
<dependency org="org.aspectj" name="aspectjtools" rev="1.6.11"/>
存储库 POM 损坏
使用快照存储库的问题是有时 POM 会损坏。 Ivy 无法处理以下文件:
http://repo.neo4j.org/content/repositories/snapshots/org/neo4j/app/neo4j-server/1.5-SNAPSHOT/neo4j-server-1.5-SNAPSHOT.pom
这会阻止 ivy 下载 neo4j-server 工件....
[ivy:retrieve] :::: WARNINGS
[ivy:retrieve] io problem while parsing ivy file: http://repo.neo4j.org/content/repositories/snapshots/org/neo4j/app/neo4j-server/1.5-SNAPSHOT/neo4j-server-1.5-SNAPSHOT.pom: Impossible to load parent for file:/home/mark/.ivy2/cache/org.neo4j.app/neo4j-server/ivy-1.5-SNAPSHOT.xml.original. Parent=org.neo4j.build#parent-pom;25
[ivy:retrieve] module not found: org.neo4j.app#neo4j-server;1.5-SNAPSHOT
..
[ivy:retrieve] ::::::::::::::::::::::::::::::::::::::::::::::
[ivy:retrieve] :: UNRESOLVED DEPENDENCIES ::
[ivy:retrieve] ::::::::::::::::::::::::::::::::::::::::::::::
[ivy:retrieve] :: org.neo4j.app#neo4j-server;1.5-SNAPSHOT: not found
[ivy:retrieve] ::::::::::::::::::::::::::::::::::::::::::::::
解决方法
在设置文件中配置 ivy 以使用 url resolver 直接检索工件。 ibiblio resolver 用于所有其他 POM 有效的模块。
<ivysettings>
<settings defaultResolver="chain"/>
<resolvers>
<chain name="chain">
<ibiblio name="central" m2compatible="true"/>
<ibiblio name="neo4j-snapshot" m2compatible="true" root="http://repo.neo4j.org/content/repositories/snapshots"/>
</chain>
<url name="neo4j-snapshot-hack">
<artifact pattern="http://repo.neo4j.org/content/repositories/snapshots/[organisation]/[module]/[revision]/[artifact]-[revision](-[classifier]).[ext]"/>
</url>
</resolvers>
<modules>
<module organisation="org.neo4j.app" name="neo4j-server" resolver="neo4j-snapshot-hack"/>
</modules>
</ivysettings>
这意味着可能会跳过绕过的 POM 文件中的传递依赖项。如果 POM 无法正常工作,则无能为力
【讨论】:
非常感谢马克的快速回答——这正是我想要的!此外,快照 pom 并没有给我任何提示,因此似乎不需要破解。将在文档中添加有关常春藤设置的注释。再次感谢! 顺便说一句,<artifact name="neo4j-server" type="jar" />
似乎没有拉下传递依赖项——有什么方法可以指定吗?
我在读取该模块的 POM 文件时仍然收到错误消息......这解释了为什么我没有传递依赖关系......你在清除你的 ivy 缓存吗? (请参阅 ivy 的 cleancache 任务)也许您的构建正在检索快照构建的旧副本。
我用常春藤警告信息更新了我上面的答案。模块的 POM 引用了一个似乎在 repo 中不存在的父 POM。
非常感谢马克!现在将其包含在文档中,请参阅docs.neo4j.org/chunked/snapshot/…以上是关于如何使用不同的分类器在 Ivy 中下载多个 Maven 依赖项?的主要内容,如果未能解决你的问题,请参考以下文章
django-rest-framework 序列化器在多个视图中的不同字段