如何使用ivy在本地解决

IAm*_*aja 3 java dependencies ivy

我已经使用 Ivy 和 URL 解析器设置了我们的 Eclipse 项目,该 URL 解析器在办公室的 Web 服务器上查找工件和 ivy 文件。一切都很好。

我有几个项目是其他项目的依赖项,我想调整 Ivy 配置,以便这些依赖项可以“在本地发布”,并且依赖于它们的下游项目可以在本地解析它们。这样做将允许开发人员在一个项目中进行更改,并在依赖它的另一个项目中看到这些更改的涟漪;所有这些都无需发布到我们的官方(网络服务器)存储库。

首先,我向作为下游项目依赖项的项目(我们称之为)添加了一个本地发布任务DepProj

<target name="publish-locally" depends="clean,dist">
    <ivy:publish resolver="local" overwrite="true" pubrevision="${ivy.new.revision}">  
        <artifacts pattern="${distDir}/[artifact].[ext]" />   
</ivy:publish>
</target>
Run Code Online (Sandbox Code Playgroud)

然后我修改了DepProj下游项目之一的 ivy.xml 文件,称为DownstreamProj

<dependency org="ourOrg" name="DepProj" rev="latest.integration" conf="*->*"/>
Run Code Online (Sandbox Code Playgroud)

我现在正在窒息连接两者。我需要调整我们的ivy.settings文件以使用文件系统解析器。在DepProj本地发布时,可以看到先运行clean,然后dist。该dist目标创建下JAR DepProj/dist/DepProj.jar

我想我需要将文件系统解析器(以某种方式)指向这个dist目录?但话说回来,这DepProj不是我想在本地发布的唯一项目。

我这里有大部分拼图,我只是在连接一些点时遇到了麻烦。

某种SOer能把我推向正确的方向吗?一个有用的代码示例也总是非常感谢!谢谢!

oer*_*ers 5

您肯定需要定义一个文件系统解析器并创建您自己的 ivysettings.xml。

您必须为其提供一个可以发布的特殊目录。这应该在您的项目之外的某个地方。

    <filesystem name="local" checkmodified="true">
        <ivy pattern="${basedir}/../repo/[module](-[branch])/[revision]/[artifact](-[branch])-[revision].[ext]" />
        <artifact pattern="${basedir}/../[module]/[revision]/[artifact](-[branch])-[revision].[ext]" />
    </filesystem>
Run Code Online (Sandbox Code Playgroud)

这将表现得像一个完全正常的存储库。解析工件将被复制到您的缓存,并从那里复制到您的检索位置。

在发布工件将被复制到那里。

您可以将路径设置为ivysettings.xml

<property name="ivy.settings.file" value="${path_to_file}/ivysettings.xml"/>
Run Code Online (Sandbox Code Playgroud)

这将通过调用自动读取:

<ivy:settings />
Run Code Online (Sandbox Code Playgroud)

激活设置。

您还可以为特殊模块创建一个链,它首先在文件系统中查找,然后在存储库中查找:

<resolvers>
    <url name="remote"/>
    <filesystem name="local" checkmodified="true" />

    <chain name="ourOrg" dual="true" latest="time"> 
        <resolver ref="local"/>
        <resolver ref="remote"/>
    </chain>    
</resolvers>

  <modules>
    <!-- resolver für readybank module-->
    <module organisation="ourOrg" resolver="ourOrg"/>
  </modules>
Run Code Online (Sandbox Code Playgroud)

IvyDe for eclipse 有一个工作区解析器,它适用于在 eclipse 中打开的任何项目。