进行极端编辑以使其更有意义:
让我们假设我需要使用本地版本的httpclient而不是我可以从在线仓库中提取的版本(由于签名原因)。我想要处理的方式是这样......
的ivy.xml
<dependencies>
...Other dependencies here
<dependency org="com.apache" name="httpclient" rev="4.2.2" conf="compile->default" ext="jar" />
</dependencies>
ivysettings.xml
<settings defaultResolver="central"/>
<resolvers>
<url name="repo">
<ivy pattern="http://myServer:8080/Repo/[organisation]/[artifact]/[revision]/ivy.xml" />
<artifact pattern="http://myServer:8080/Repo/[organisation]/[artifact]/[revision]/[artifact].[ext]"/>
</url>
<url name="httpclient">
<artifact pattern="http://myServer:8080/Repo/com.apache/httpclient/4.2.2/[artifact].[ext]"/>
</url>
<modules>
<module organisation="com.apache" resolver="repo" />
<module organisation="com.httpclient" resolver="httpclient" />
</modules>
现在我希望在这里(并且没有太多运气)是com.apache解析器寻找myServer:8080 / Repo / com.apache / httpclient / 4.2.2 / ivy.xml和读到这里,这是该文件的内容:
ivy.xml(在myServer:8080 / repo / ...目录中)
<dependency org="com.httpclient" name="commons-codec" rev="1.6" />
<dependency org="com.httpclient" name="commons-logging" rev="1.1.1" />
<dependency org="com.httpclient" name="fluent-hc" rev="4.2.2" />
<dependency org="com.httpclient" name="httpclient" rev="4.2.2" />
<dependency org="com.httpclient" name="httpclient-cache" rev="4.2.2" />
<dependency org="com.httpclient" name="httpcore" rev="4.2.2" />
<dependency org="com.httpclient" name="httpmime" rev="4.2.2"/>
当您考虑将多少LOC添加到我们经常包含的内容时,想要读取第二个xml文件而不是在我的第一个文件中包含标记的原因是非常明显的。它还使所有未来包括更容易。
目前我收到的错误是:
有些项目无法解决 无法解决com.myCompany#myProgramt; working @ CompName的依赖关系 未解决的依赖:com.apache #httpient; 4.2.2:未找到
感谢您对此事的帮助。
答案 0 :(得分:1)
将构建配置为使用以下解析程序时
<ibiblio name="central" m2compatible="true"/>
您告诉常春藤从Maven Central
下载其依赖项你的目标是什么?要创建一个功能像Maven Central一样的本地常春藤回购?在这种情况下,最简单的解决方案是设置Maven存储库管理器,如:Nexus,Artifactory或Archiva。 maven存储库管理器可以像智能缓存和存储在Central Maven存储库中的“代理”jar一样。
配置构建以使用本地Maven存储库非常简单:
<ibiblio name="central" m2compatible="true" root="http://hostname:portnum/MavenRepo/>
答案 1 :(得分:1)
Ivy希望在同一个解析器中找到给定工件的所有依赖关系。因此,它会在com.apache
解析器中找到repo
的工件,并希望在那里找到com.httpclient
。
Ivy还会在相同的解析器声明中按顺序浏览您的<ivy pattern.../>
和<artifact pattern.../>
语句。你可以利用它来创建一个单独的解析器,它按照你想要的顺序命中两个存储库:
<url name="amalgamation">
<ivy pattern="http://myServer:8080/Repo/[organisation]/[artifact]/[revision]/ivy.xml" />
<artifact pattern="http://myServer:8080/Repo/[organisation]/[artifact]/[revision]/[artifact].[ext]"/>
<artifact pattern="http://myServer:8080/Repo/com.apache/httpclient/4.2.2/[artifact].[ext]"/>
</url>
答案 2 :(得分:0)
您使用的服务器用于远程JAR存储库?
Nexus和Artifactory都可以设置为在从远程存储库中提取jar之前拉出本地存储的jar。这样,您就不必使用ivysettings.xml
。相反,您只需在Artifactory / Nexus上下载您喜欢的罐子版本。而且,两者都是免费的,开源的,下载的。使用Artifactory / Nexus可以更轻松地完成您想要的任务,而不是使用常春藤设置。
顺便说一句,我在Github有一个Ivy project你可能想看一下。您只需将此项目附加到Ant项目,它就会为Ivy自动配置所有内容。通过这种方式,整个站点可以将Ivy用于他们的所有项目,并且所有项目都是集中控制的。