常春藤依赖(拉入文件目录)

时间:2012-11-26 15:21:26

标签: java ant build dependencies ivy

进行极端编辑以使其更有意义:

让我们假设我需要使用本地版本的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:未找到


感谢您对此事的帮助。

3 个答案:

答案 0 :(得分:1)

将构建配置为使用以下解析程序时

 <ibiblio name="central" m2compatible="true"/>

您告诉常春藤从Maven Central

下载其依赖项

你的目标是什么?要创建一个功能像Maven Central一样的本地常春藤回购?在这种情况下,最简单的解决方案是设置Maven存储库管理器,如:NexusArtifactoryArchiva。 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用于他们的所有项目,并且所有项目都是集中控制的。