常春藤解决不同设置的依赖关系

毛特罗克

我已经以这种方式配置了settings.xml:

settings.xml

<ivysettings>
    <settings defaultResover="archiva">
        <credentials host="host" realm="Repository Archiva Managed internal Repository" username="user" passwd="passwd" />

    </settings>
    <property name="ivy.shared.default.root" value="http://host.it/repository/internal/" override="false"/>
    <property name="ivy.shared.default.ivy.pattern" value="[organisation]/[module]/[revision]/[type]s/[artifact].[ext]" override="false"/>
    <property name="ivy.shared.default.artifact.pattern" value="[organisation]/[module]/[revision]/[type]s/[artifact].[ext]" override="false"/>

    <resolvers>
        <chain name="archiva">
            <ibiblio name="ibiblio" m2compatible="true"/>
            <ibiblio name="archibib" root="http://host.it/repository/internal/" m2compatible="true"/>
        </chain>
    </resolvers>    
    <modules>
        <module organisation="annogen" name="annogen" resolver="archiva" />
        <module organisation="commons-lang" name="commons-lang" resolver="archiva" />
        <module organisation="commons-codec" name="commons-codec" resolver="archiva" />
        <module organisation="commons-logging" name="commons-logging" resolver="archiva" />
        <module organisation="geniogroup.bbi" name="resutil" resolver="archiva" />                      
    </modules>

</ivysettings>

Build.xml

<target name="resolve" description="--> take dependencies"> 
     <ivy:settings id="dependency" file="archivaIvySetting.xml" />
     <ivy:retrieve pattern="./lib" />
</target>

日志

settings loaded (60ms)
[ivy:retrieve]    default CACHE
[ivy:retrieve]    default resolver: null
[ivy:retrieve]    default latest strategy: latest-revision
[ivy:retrieve]    default conflict manager: latest-revision
[ivy:retrieve]    circular dependency strategy: warn
[ivy:retrieve]    validate: true
[ivy:retrieve]    check up2date: true
[ivy:retrieve]    -- 1 resolvers:
[ivy:retrieve]    archiva [ibiblio]
[ivy:retrieve]        cache: null
[ivy:retrieve]        m2compatible: true
[ivy:retrieve]        ivy patterns:
[ivy:retrieve]            http://host.it/repository/internal/[organisation]

/ [模块] / [修订] / [工件]-修订。[ext]

[ivy:retrieve]        artifact patterns:
[ivy:retrieve]            http://host.it/repository/internal/[organisation]/[module]/[revision]/[artifact]-[revision](-[classifier]).[ext] 

[ivy:retrieve]        repository: archiva
[ivy:retrieve]        root: http://host.it/repository/internal/
[ivy:retrieve]        pattern: [organisation]/[module]/[revision]/[artifact]- [revision](-[classifier]).[ext] 
[ivy:retrieve]        usepoms: true
[ivy:retrieve]        useMavenMetadata: true
[ivy:retrieve]    module settings:
[ivy:retrieve]        NONE......

.......[ivy:retrieve] post 1.3 ivy file: using exact as default matcher
[ivy:retrieve] :: resolving dependencies :: geniogroup.bbi#bpsxml;1.0
[ivy:retrieve]    confs: [default]
[ivy:retrieve]    validate = true
[ivy:retrieve]    refresh = false
[ivy:retrieve] resolving dependencies for configuration 'default'
[ivy:retrieve] == resolving dependencies for.....

.......[ivy:retrieve] :::: ERRORS
[ivy:retrieve]    unknown resolver null
[ivy:retrieve]    no resolver found for annogen#annogen: check your configuration

我不明白这是怎么回事,我已经编写了解析器,为检索任务设置了设置,但是似乎它没有读取解析器,是否有问题?

更新

现在,将模块任务添加到设置中即可检索jar文件,但是我不明白为什么我无法将jar保存到我的工作区中。

马克·奥康纳

可能是拼写错误吗?您的设置文件名为ivysettings.xml,而不是archivaIvySetting.xml。

<target name="resolve" description="--> take dependencies"> 
     <ivy:settings id="dependency" file="archivaIvySetting.xml" />
     <ivy:retrieve settingsRef="dependency" />
</target>

我还要指出的是,仅在将非标准位置用于设置文件时才需要常春藤设置任务。默认情况下,它在本地查找ivysettings.xml。

建议的变更

ivysettings.xml

<ivysettings>
    <settings defaultResover="archiva">
        <credentials host="host" realm="Repository Archiva Managed internal Repository" username="user" passwd="passwd" />
    </settings>    
    <resolvers>
        <chain name="archiva">
            <ibiblio name="ibiblio" m2compatible="true"/>
            <ibiblio name="archibib" root="http://host.it/repository/internal/" m2compatible="true"/>
        </chain>
    </resolvers>    
</ivysettings>

笔记:

  • 除非确实需要,否则不要覆盖常春藤的默认属性。
  • 是否可以让Archiva代理Maven Central之类的远程存储库?这将使设置文件更加简单:

<ivysettings>
    <settings defaultResover="archiva">
        <credentials host="host" realm="Repository Archiva Managed internal Repository" username="user" passwd="passwd" />
    </settings>    
    <resolvers>
       <ibiblio name="archiva" root="http://host.it/repository/proxy/" m2compatible="true"/>
    </resolvers>    
</ivysettings>

build.xml

我过度使用了常春藤检索任务,直到发现将配置与常春藤缓存路径任务结合在一起的功能。

    <target name="resolve" depends="install-ivy" description="Use ivy to resolve classpaths">
        <ivy:resolve/>

        <ivy:report todir='${build.dir}/ivy-reports' graph='false' xml='false'/>

        <ivy:cachepath pathid="compile.path" conf="compile"/>
        <ivy:cachepath pathid="test.path"    conf="test"/>
    </target>

仅当需要将文件保存到构建工作区中时,才需要执行检索任务。

    <target name="build" depends="test" description="Create executable jar archive">
        <ivy:retrieve pattern="${dist.dir}/lib/[artifact]-[revision](-[classifier]).[ext]" conf="runtime"/>

        <manifestclasspath property="jar.classpath" jarfile="${jar.file}">
            <classpath>
                <fileset dir="${dist.dir}/lib" includes="*.jar"/>
            </classpath>
        </manifestclasspath>

        <jar destfile="${jar.file}" basedir="${build.dir}/classes">
            <manifest>
                <attribute name="Main-Class" value="${jar.main.class}" />
                <attribute name="Class-Path" value="${jar.classpath}" />
            </manifest>
        </jar>
    </target>

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章