• 初学Ivy(1)安装配置


    maven很强大,但是远不完美,令人烦恼的地方也不少。看到Ivy似乎日渐成熟,试试看这个小东西表现如何,毕竟后面有那个强大的我喜欢的ant。

       折腾了一番,整理出来点东西,分享给对ivy同样感兴趣的朋友。依然是"初学"系列,提供给新手入门使用。

      一. 下载安装

       从官网http://ant.apache.org/ivy/下载到最新的ivy2.0.0正式版,选择的是with dependencies的包。

       在安装ivy之前,请先安装好ant1.6以上版本,因为Ivy是基于ant的。

       参照官网的安装,将下载下来的ivy安装包解压,然后复制ivy的jar文件到ant的lib目录下(ANT_HOME/lib)。设置系统属性IVY_HOME到ivy的安装目录,比如G:\soft\ivy\ivy200。

       另外一个简单的安装方法,就是直接到ivy的src/example/hello-ivy 目录下执行ant,会从网上下载ivy并安装的。

      二. 设置工作目录

       Ivy 使用"ivy.default.ivy.user.dir"作为工作目录,ivy通过以下方式确认该目录的具体路径:

       1. 查找变量ivy.default.ivy.user.dir

       2. 如果没有找到,查找变量ivy.home

       3. 如果还没有找到,查找变量user.home,然后使用user.home/.ivy目录

       默认安装而没有专门设置前,前两个变量不存在,因此ivy就会使用user.home作为默认工作目录.

       Ivy 使用cache目录来存放缓存文件,ivy通过以下方式确认该目录的具体路径:

       1. 查找变量ivy.cache.dir

       2. 如果没有找到,使用ivy.default.ivy.user.dir/cache

       默认安装而没有专门设置前,前ivy.cache.dir变量不存在,因此ivy就会使用ivy.default.ivy.user.dir/cache,由于ivy.default.ivy.user.dir在该情况下默认使用user.home,因此最后的结果就是使用user.home/cache目录.

       修改默认工作路径的方法,很明显,设置上述的几个变量值即可。比如需要将ivy.default.ivy.user.dir设置到一个特定的目录而不是使用当前操作系统的user.home路径,对于ivy,可以通过设置ant属性的方式。比如修改build.XML文件,增加以下内容

        <property name="ivy.default.ivy.user.dir" value="G:\soft\ivy\userdir" />

       这样就将工作路径修改过去,cache目录也随之改变,避免重新安装操作系统/安装多操作系统等情况下对当前操作系统和用户的依赖。

       由于build.xml文件通常都是项目文件,需要提交到cvs、subversion等版本控制系统中,因此直接在里面写路径不大适合,一旦修改需要改动所有项目的build.xml,而且不同开发人员要求路径相同,不大合理。考虑到ant是可以方便读取系统环境变量的,因此可以用环境变量来定义具体的路径,ant简单使用该环境变量:

       设置环境变量env.ivy.default.ivy.user.dir=G:\soft\ivy\userdir

       build.xml中这样引用:

        <property environment="env"/>
        <property name="ivy.default.ivy.user.dir" value="${env.ivy.default.ivy.user.dir}" />

       以上目录使用规则可以直接看ivy的源代码,很清晰,类org.apache.ivy.core.settings.IvySettings中IvySettings()的构造函数很容易看出上面的规则。(惭愧,刚学ivy,对配置不熟悉,又找不到相关的配置说明文档,只好蛮干了)

      三. 配置文件路径

       ivy使用变量名ivy.settings.file来设置配置文件路径,由于没有找到相关的设置文档,因此干脆打开源文件看代码。

       在类org.apache.ivy.ant.IvyAntSettings中,函数defineDefaultSettingFile()中有相关的代码:

       1. 查找变量名ivy.settings.file

       settingsFileName = variableContainer.getVariable("ivy.settings.file");

       2. 可能的路径,依次是项目BaseDir(应该是ant的build.XML文件中定义的BaseDir,通常是项目根路径),当前路径,很奇怪居然不查找诸如ivy.default.ivy.user.dir的路径,甚至连ivy.settings.dir都不去查找,莫名其妙

        File[] settingsLocations = new File[] {
                    new File(getProject().getBaseDir(), settingsFileName),
                    new File(getProject().getBaseDir(), "ivyconf.xml"), 
                    new File(settingsFileName),
                    new File("ivyconf.xml") 
            };

       3. 上面四个路径依次查找

            for (int i = 0; i < settingsLocations.length; i++) {
                file = settingsLocations[i];
                verbose("searching settings file: trying " + file);
                if (file.exists()) {
                    break;
                }
            }

       4. 如果没有找到,则取默认设置

        if (!file.exists()) {
                    info("no settings file found, using default...");
                    file = null;
                    url = IvySettings.getDefaultSettingsURL();
            }

       默认配置文件是ivy.jar包中的org.apache.ivy.core.settings.ivysettings.XML,如果不做任何相关配置,一般都使用这个默认配置。

       了解ivy是怎么工作了,想配置就方便了。比如如果希望为当前项目单独设置,则可以:

       1. 在当前项目BaseDir目录下放置ivyconf.xml文件

           new File(getProject().getBaseDir(), "ivyconf.xml")

           这个是最简单的方案了,奇怪的是这里的文件名是ivyconf.xml,很郁闷,我用ivysettings.xml测试了好久都不生效,原来根结在这个地方。风格不统一,估计是新老版本兼容问题,幸亏可以看到源代码。

       2. 或者同时设置ivy.settings.file为要求的文件名,将该文件放置在项目BaseDir目录下

           new File(getProject().getBaseDir(), settingsFileName)

           比如设置ivy.settings.file=ivysettings.xml,这样可以和jar包中的文件名保持一致。似乎用处不大?

       3. 为了让所有项目统一使用相同配置,可以考虑直接将ivy.settings.file指向一个公共的配置文件

           比如设置ivy.settings.file为${env.ivy.default.ivy.user.dir}/ivysettings.xml

           这样就不必每次都重复设置相同的内容,比如ivy的public repository,默认是使用maven2的官网仓库,我们可以修改为使用maven的本地私库,如nexus之类。

       build.xml中的设置:

        <property environment="env"/>
        <property name="ivy.default.ivy.user.dir" value="${env.ivy.default.ivy.user.dir}" />
        <property name="ivy.settings.file" value="${ivy.default.ivy.user.dir}/ivysettings.xml" />

      四. 和nexus集成

       我喜欢使用nexus来搭建maven2的私服,即使家里机器上的私服只有我一个人用......

       因此想让ivy能连到我现有nexus私服,google了一下找到解决的方法,实验成功,只需要修改两个地方:

       1. ivysettings.XML

           将原有的

        <include url="${ivy.default.settings.dir}/ivysettings-public.xml"/>

       修改为

        <include url="./ivysettings-public.xml"/>

       2. 在ivysettings.xml相同目录下放置ivysettings-public.xml文件

           实际从ivy.jar包中copy出对应文件,然后修改

           <ibiblio name="public" m2compatible="true" root="http://192.168.0.30:8081/nexus/content/groups/public/"/>

           注意这里的name="public"不能改,否则会报错。

           有关public, shared, private三个repository的资料,请参考官方文档,说明的很细致

           http://ant.apache.org/ivy/history/latest-release/tutorial/defaultconf.html

      added in 2009-04-22:

       上面的内容有点乱,三个星期后我在另一台机器上安装ivy时,对照本文看居然都没有直接搞定,又浪费了点时间折腾......

       决定再啰嗦一点,下面是具体操作步骤,这次足够简单直接了:

      1) install ant1.6+

        set env ANT_HOME=G:\soft\ant
        set Path, add ANT_HOME/bin

      2) install ivy

        set env IVY_HOME=G:\soft\ivy\ivy200
        set env ivy.default.ivy.user.dir=G:\soft\ivy\userdir

      3) config ivy for all projects and users

        1. copy ivysettings.XML to userdir
        2. copy ivysettings-public.xml to userdir
        3. open ivysettings-public.xml, edit m2 URL

      4) add ivy setting to ant build.xml of project

        ......
        <property environment="env"/>
        <property name="ivy.default.ivy.user.dir" value="${env.ivy.default.ivy.user.dir}" />
        <property name="ivy.settings.file" value="${ivy.default.ivy.user.dir}/ivysettings.xml" />
        ......

      added in 2009-05-29:

       在Linux上测试的时候,才发现一个问题,ivy.default.ivy.user.dir是不能作为linux下的环境变量名的!为了保持一致,只好修改为IvyDefaultUserDir。

       即:

        set env IvyDefaultUserDir=G:\soft\ivy\userdir
        ......
        <property environment="env"/>
        <property name="ivy.default.ivy.user.dir" value="${env.IvyDefaultUserDir}" />
        <property name="ivy.settings.file" value="${ivy.default.ivy.user.dir}/ivysettings.xml" />

  • 相关阅读:
    Debian双网卡配置
    Linux服务器双网卡双IP和单网卡双IP配置方法(Debian/Ubuntu)
    Debian系列网卡配置详解
    Debian下配置IPV6和静态路由
    Ubuntu Server系统修改IP地址
    Centos7新增静态路由
    Debian添加静态路由的正确姿势
    Linux 更改时区、时间
    Apache 2.4自签名证书及客户端SSL认证
    【计划】
  • 原文地址:https://www.cnblogs.com/sunwei2012/p/1961982.html
Copyright © 2020-2023  润新知