如何使用Ivy获取JAR以外的工件?

时间:2012-10-04 23:44:52

标签: java ant ivy dependency-management

我想将一个Java库用作构建的一部分,但它包含一个外部resources/目录,该目录必须对运行时类路径可见才能工作。我希望能够将它作为一个工件存储在我的Ivy存储库中,但不确定Ivy是否可以处理这个问题,如果是的话,如何装配ivy.xmlivy-settings.xml文件,以及回购本身。

我的repo实际上是一个Artifactory服务器,我将工件及其常春藤文件存储在彼此旁边:

http://myrepo.com:8080/artifactory/simple/myrepo/
    google/
        guice/
            3.0/
                guice-3.0.jar
                ivy.xml

等。我想我在这里寻找类似的设置:

http://myrepo.com:8080/artifactory/simple/myrepo/
    fizz/
        buzz/
            1.7/
                buzz-1.7.jar
                resources/
                ivy.xml

...并以某种方式将jar及其resources/目录作为常春藤解析/检索模式的一部分拉下来,然后将resources/放在我需要的位置。

这可能吗?有任何想法吗?提前谢谢!

编辑 - 如果resources/是一个目录导致问题,我不介意将其解压缩为resources.zip,然后将其解析/检索到我在构建时的项目,然后解压缩它。如果Ivy无法处理开箱即用的目录工件,那还有更多工作要做。

1 个答案:

答案 0 :(得分:2)

您应该压缩/ tar目录并创建以下设置:

http://myrepo.com:8080/artifactory/simple/myrepo/
    fizz/
        buzz/
            1.7/
                buzz-1.7.jar
                resources-1.7.zip
                ivy-1.7.xml

在你的ivy.xml中,你会将每个文件声明为此模块的发布,如下所示:

<?xml version="1.0" encoding="UTF-8"?>
<ivy-module version="2.0">
    <info organisation="fizz"
        module="buzz"
        revision="1.7"
        status="release"
        publication="20110531150115"
        default="true"
    />
    <configurations>
        <conf name="default" visibility="public"/>
    </configurations>
    <publications>
      <artifact name="buzz"      type="jar" />
      <artifact name="resources" type="zip" />
    </publications>
</ivy-module>

如果需要,您可以定义单独的配置,如:

    <configurations>
            <conf name="default" extends="jar, resources" visibility="public"/>
            <conf name="jar" visibility="public"/>
            <conf name="resources" visibility="public"/>
    </configurations>
    <publications>
      <artifact name="buzz"      type="jar" conf="jar"/>
      <artifact name="resources" type="zip" conf="resources"/>
    </publications>