[英]Ivy Dependency (pull in directory of files)
对问题进行极端编辑以使其更有意义:
假设我需要使用本地版本的 httpclient 而不是我可以从在线存储库中提取的版本(由于签名原因)。 我想处理这个的方式是这样的......
常春藤.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 unresolved dependency: com.apache#httpclient;4.2.2: not found
感谢您对此事的帮助。
当您将构建配置为使用以下解析器时
<ibiblio name="central" m2compatible="true"/>
您是在告诉 ivy 从Maven Central下载它的依赖项
你在这里的目标是什么? 要创建一个功能类似于 Maven Central 的本地常春藤存储库? 在这种情况下,最简单的解决方案是设置一个 Maven 存储库管理器,如: Nexus 、 Artifactory或Archiva 。 Maven 存储库管理器可以充当智能缓存和存储在中央 Maven 存储库中的“代理”jar。
配置您的构建以使用本地 Maven 存储库很容易:
<ibiblio name="central" m2compatible="true" root="http://hostname:portnum/MavenRepo/>
Ivy 希望在同一个解析器中找到给定工件的所有依赖项。 因此,它com.apache
在您的repo
解析器中找到com.httpclient
的工件,并希望在那里找到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>
您为远程 JAR 存储库使用什么服务器?
Nexus 和 Artifactory 都可以设置为在从远程存储库中提取 jar 之前提取本地存储的 jar。 这样,您就不必修改您的ivysettings.xml
。 相反,您只需在 Artifactory/Nexus 上下载您喜欢的 jar 版本。 而且,两者都是免费的、开源的、可下载的。 使用 Artifactory/Nexus 做你想做的事情比使用你的 Ivy 设置更容易。
顺便说一下,我在 Github 上有一个Ivy 项目,你可能想看看。 您只需将此项目附加到您的 Ant 项目,它就会为 Ivy 自动配置所有内容。 这样,整个站点都可以将 Ivy 用于他们的所有项目,并且一切都集中控制。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.