1

所以,假设我已经安装了 SVN 并在本地安装了 ANT / Ivy。

我想让常春藤配置的“共享”部分指向服务器上的某种共享。我需要如何设置?

我知道我必须挖掘 ivy jar 并提取 ivysettings 文件并修改共享存储库。

因此,让我们假设我的 Intranet 上有一台服务器,位于 MyServer.intranet.net 并且我的团队的文件夹位于 /path/to/NetAdmin 下(因此完整路径将是 MyServer.intranet.net/path/to/NetAdmin )如何我将此设置为共享库的团队存储库吗?我是否只需指定它,当我打包项目时,它会在那里写入依赖项?

谢谢

4

2 回答 2

2

这是我所做的:

  • 我创建了一个名为ivy.dir.
  • 在这个ivy.dir项目中,我有最新的 ivy.jar。
  • 在 中ivy.dir,我有ivysettings.xml我们环境的设置。例如,我们为自己的 jars 使用本地 Artifactory Maven 存储库。项目ivysettings.xml中的ivy.dir指出了这一点。
  • 我创建了一个名为ivy.tasks.xml. 这是一个 Ant 构建文件。

ivy.tasks.xml看起来像这样:

<project name="Ivy.Tasks"
    xmlns:ivy="http://ant.apache.org/ivy"
    xmlns:jacoco="antlib:org.jacoco.ant">

    <property environment="env"/>

    <!-- Add Ivy Tasks -->
    <taskdef uri="http://ant.apache.org/ivy"
        resource="org/apache/ivy/ant/antlib.xml">
        <classpath>
            <fileset dir="${ivy.dir}">
                <include name="ivy*.jar"/>
            </fileset>
        </classpath>
    </taskdef>
    <ivy:settings file="${ivy.dir}/ivysettings.xml"/>
</project>

请注意,我有自己的 Ivy 设置,谢谢。我没有必要修改其中的那个ivy.jar(尽管我可以这样做,因为每个人都会使用我的ivy.jar文件!)。我的ivysettings.xml样子是这样的:

<ivysettings>

    <!-- I'll explain this part below -->
    <property name="env.EXECUTOR_NUMBER" value="0" override="false"/>
    <caches
        defaultCacheDir="${ivy.default.ivy.user.dir}/cache-${env.EXECUTOR_NUMBER}"
        resolutionCacheDir="${ivy.dir}/../target/ivy.cache"/>

    <!-- Just the standard stuff you find in the `ivysettings.xml in the ivy.jar -->
    <settings defaultResolver="default"/>
    <include file="${ivy.dir}/ivysettings-public.xml"/> <!-- This one is different -->
    <include url="${ivy.default.settings.dir}/ivysettings-shared.xml"/>
    <include url="${ivy.default.settings.dir}/ivysettings-local.xml"/>
    <include url="${ivy.default.settings.dir}/ivysettings-main-chain.xml"/>
    <include url="${ivy.default.settings.dir}/ivysettings-default-chain.xml"/>
</ivysettings>

最大的变化是ivysetting-public.xml文件:

<ivysettings>
    <resolvers>
        <ibiblio name="public"
            m2compatible="true"
            checkmodified="true"
            root="http://repos.vegicorp.com/artifactory/libs-release" />
    </resolvers>
</ivysettings>

它指向我的本地 Maven 存储库——我的 Artifactory 服务器。

现在,对于使用 Ivy 的开发人员,他们所要做的就是:

  • 在 Subversion 项目的根目录中,添加一个svn:external. 这svn:external将用于将我的ivy.dir项目带入他们的 Subversion 项目。
  • 在 build.xml
    • build.xml在定义中为它们添加一个 Ivy 命名空间<project>定义。
    • 将属性设置ivy.dir为`${basedir}/ivy.dir。
    • 使用<import>任务导入${ivy.dir}/ivy.tasks.xml他们的build.xml文件。

像这样的东西:

<project name="post-a-matic" default="package" basedir="."
    xmlns:ivy="http://ant.apache.org/ivy">

    <property name="ivy.dir" value="${basedir}/ivy.dir"/>
    <import file="${ivy.dir}/ivy.tasks.xml"/>

    <!-- A whole bundle of properties are set -->

    <target name="clean">
        <delete dir="${target.dir}"/>
        <ivy:cleancache/>   <!-- Look: They have access to Ivy! -->
    </target>

    <target name="-resolve">
        <ivy:resolve/>
    </target>

    <target name="compile"
        depends="-resolve">

       <ivy:cachpath 
           pathid="main.classpath" 
           conf="compile,provided"/>

       <!-- Boy that's easy! -->

       <javac srcdir="${main.srcdir}"
           destdir="${main.destdir}"
           classpathref="main.classpath"/>
   </target>

   <!-- On and on -->

这解决了很多问题:

  • 您可以更新ivy.settings并且每个人都将拥有更新的设置。这最终对我们非常重要,因为我们使用 Jenkins,我希望 Jenkins 清理每个构建的 ivy 缓存。哎呀!这会清除同时执行的构建中的常春藤缓存!我通过更改ivysettings.xml文件为每个 Jenkins 构建执行程序定义不同的 Ivy 缓存解决了这个问题。在 Jenkins 服务器中,您有名为$HOME/.ivy2/cache-0,$HOME/.ivy2/cache-1等的常春藤缓存。每个执行程序都可以删除它自己的常春藤缓存,而不会影响其他人。同时,用户将只有$HOME/.ivy2/cache-0.
  • 您还可以在新罐子出来时更新 Ivy。你更新了你的 Ivy jar 文件,每个人都得到了迟到的东西。
  • 最重要的当然是 Ivy 会在项目签出时自行安装。
  • 还有一个额外的特殊奖励:您可以使用您的ivy.dirivy.tasks.xml文件来安装其他任务。例如,我们的每个项目都必须通过Findbugs PMD、 CPD (PMD 项目的一部分Checkstyle )运行自己,并使用JaCoCo进行测试覆盖。

这些项目中的每一个都包含一个 jar 文件和一个<taskdef>用于将任务定义拉入 Ant 的文件。而且,您也如何使用这些任务?它们没有在标准 Ant 模型中定义。开发人员不知道如何使用它们。

我已将这些 jar 添加到我的ivy.dir项目中,并将所有这些任务定义安装到我的ivy.tasks.xml文件中。我还为大多数这些任务定义了易于使用<macrodef>,因此开发人员很容易使用它们。事实上,我什至包含了旧的 Ant-Contrib 任务只是为了好玩。

现在,一旦你添加ivy.dir到你的项目中,你就拥有了所有这些额外的任务,并且你没有任何东西可以安装在你的机器上。

于 2012-09-13T01:54:05.183 回答
1

你不需要改变常春藤罐子。只需在 ivysettings 文件中创建文件系统解析器并发布到此文件。这是一个例子:

您会发现 ivy 非常灵活,几乎可以支持任何托管文件的机制。

就个人而言,我会考虑安装像NexusArtifactory这样的 Maven 存储库管理器,并使用它来托管您的构建依赖项和构建输出。从长远来看,这要容易得多,尤其是在您进行 Java 开发时。

于 2012-09-12T21:19:34.463 回答