如何为项目/lib 中的本地 jar 创建 Ivy 依赖项?

Posted

技术标签:

【中文标题】如何为项目/lib 中的本地 jar 创建 Ivy 依赖项?【英文标题】:How to create an Ivy dependency for local jars inside your project/lib? 【发布时间】:2011-01-13 16:26:04 【问题描述】:

我有几个 jar 文件(其中一些相互依赖),我正在尝试让 ivy 为我的项目管理它们。

我不想创建“本地”(基于用户目录)存储库,因为我希望其他用户能够检查我的 svn 项目并在没有本地/共享存储库设置的情况下运行它。由于各种原因,我无法将这些文件添加到我们正在使用的实际存储库中。

项目依赖于这些文件,我在 SVN 中使用它们。过去,我有正常的 ivy 依赖 xml 文件。这些文件使用一个设置 xml 文件指向远程存储库。过去,在最后一刻,我让 ant 使用构建任务将这些文件从 lib 文件夹复制到构建文件夹中。这感觉像是一种破坏性的滥用,它忽略了 ivy 文件系统解析器的功能。

(用于 3 个可构建项目的 ivy.xml 和 build.xml 在另一个基本目录中使用相同的 ivysettings.xml。)

我觉得我已经完成了 90% 的工作,我应该在 ivysettings.xml 中将我的文件系统解析器指向什么,以便在解析器链中进行第一次解析,检查 projectdir/lib 中的 jar 文件?

【问题讨论】:

【参考方案1】:

你看过常春藤任务buildlist吗?

您可以使用它来控制 3 个模块的构建顺序。随着每个模块的构建,它可以发布到本地存储库,确保 jar 及时出现以供链中的下一个模块使用。

   build.xml
   ivysettings.xml
   --> module1 --> build.xml
                   ivy.xml
   --> module2 --> build.xml
                   ivy.xml
   --> module3 --> build.xml
                   ivy.xml

您的设置文件可以被所有项目共享。它表明您构建的模块在本地可用,其他一切都来自项目的所有用户可用的默认存储库(在本例中为 Maven)

<ivysettings>
        <settings defaultResolver="maven2"/>
        <resolvers>
                <ibiblio name="maven2" m2compatible="true"/>

                <filesystem name="local">
                    <ivy pattern="$local.rep.dir/.."/>
                    <artifact pattern="$local.rep.dir/.."/>
                </filesystem>
        </resolvers>
        <modules>
                <module organisation="org.me" name="module1" resolver="local"/>
                <module organisation="org.me" name="module2" resolver="local"/>
                ..
        </modules>
</ivysettings>

最后,当您在外部发布时,您可以使用 ivy install 任务将您已经在本地发布的模块复制到最终存储库位置

【讨论】:

以上是关于如何为项目/lib 中的本地 jar 创建 Ivy 依赖项?的主要内容,如果未能解决你的问题,请参考以下文章

如何为每个用户或系统范围配置 Ivy 缓存目录?

如何在eclipse中使用Ivy + IvyDE将不同的jar放到lib和web-inf/lib中

手动检索 Ivy 依赖项作为 sbt 中的本地非托管库

在旧的 Ant 项目中添加 Ivy

从命令行使用时,如何让 Ivy 将依赖项复制到 lib 目录?

如何为 Android 库项目创建 jar