如何在常春藤或Maven中指定net.sf.json-lib#json-lib#2.3?

时间:2012-11-19 20:43:06

标签: java maven pom.xml ivy

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

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

我在常春藤中将其指定为:

<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供下载?

1 个答案:

答案 0 :(得分:6)

jar名称末尾的“thing”称为分类器。它用于定位特定平台或提供源或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了解详情。