【问题标题】:How do I specify net.sf.json-lib#json-lib#2.3 in Ivy or Maven?如何在 Ivy 或 Maven 中指定 net.sf.json-lib#json-lib#2.3?
【发布时间】:2012-11-07 20:26:15
【问题描述】:

我正在使用 Ivy 将我们的构建系统从 Ant 转换为 Ant,并且遇到了指定我们需要的特定 jar 的问题。

  • groupId:net.sf.json-lib
  • artifactId:json-lib
  • 版本:2.3

我在 Ivy 中将其指定为:

<dependency org="net.sf.json-lib"  artifact="json-lib"
    rev="2.3"     conf="compile->default"/>

并得到以下错误:

[ivy:retrieve]  ==== public: tried
[ivy:retrieve]    http://buildl01.tcprod.local/artifactory/libs-release/net/sf/json-lib/json-lib/2.3/json-lib-2.3.jar
[ivy:retrieve]          ::::::::::::::::::::::::::::::::::::::::::::::
[ivy:retrieve]          ::              FAILED DOWNLOADS            ::
[ivy:retrieve]          :: ^ see resolution messages for details  ^ ::
[ivy:retrieve]          ::::::::::::::::::::::::::::::::::::::::::::::
[ivy:retrieve]          :: net.sf.json-lib#json-lib;2.3!json-lib.jar
[ivy:retrieve]          ::::::::::::::::::::::::::::::::::::::::::::::

注意 Ivy 尝试从存储库下载文件 json-lib-2.3.jar

我在Central Maven Repository 上进行了搜索,发现该工件不称为json-lib-2.3.jar,而是json-lib-2.3-jdk-13.jarjson-lib-2.3-jdk-15.jar

问题在于指定工件名称的方式。版本号出现在 jar 名称的中间。如果工件是 `json-lib-jdk-15-2.4.jar,我可以这样做:

<dependency org="net.sf.json-lib"  artifact="json-lib"
    rev="2.3"     conf="compile->default">
    <artifact name="json-lib-jdk-15"/>
</dependency>

我如何指定这个 jar 来下载?

【问题讨论】:

标签: java maven pom.xml ivy


【解决方案1】:

jar 名称末尾的“事物”称为分类器。它用于针对特定平台或提供源代码或 Javadoc。

要获取jar,你需要像这样定义分类器:

<ivy-module version='2.0' xmlns:m="http://ant.apache.org/ivy/maven">
...
<dependency org="net.sf.json-lib" artifact="json-lib" rev="2.3"conf="compile->default">
    <artifact name="json-lib" type="jar" m:classifier="jdk15"/>
</dependency>

阅读this article了解更多信息。

【讨论】:

  • 现在我得到与元素类型“依赖”关联的属性“m:classifier”的前缀“m”未绑定。我敢打赌我必须先以某种方式修改我的 ivysettings.xml。
  • 谢谢。您pointed to 的答案确实有效。
猜你喜欢
  • 2011-05-09
  • 2012-12-25
  • 2020-02-10
  • 1970-01-01
  • 2013-08-15
  • 2012-02-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多