【问题标题】:Split organization name into nested folders using ivy:retrieve使用 ivy:retrieve 将组织名称拆分为嵌套文件夹
【发布时间】:2013-03-01 16:25:37
【问题描述】:

在 ivy 中,我可以设置检索模式,以便将所有依赖项复制到我想要的地方。

例如:

 <ivy:retrieve pattern="${local-maven2-dir}/[organisation]/[module]/[revision]/[module]-[revision].[ext]" conf="compile" type="jar,bundle" sync="true"/>

我想知道是否可以不将组织视为一个文件夹,而是将其视为一组嵌套文件夹,并将 jar 包保存在最深的文件夹(即修订版)中,就像 jar 存储在 maven 默认 repo 中一样。

所以,基本上我希望 jar 位于路径中,例如

com/yahoo/platform/yui/yuicompressor/2.4.7

不喜欢

com.yahoo.platform.yui/yuicompressor/2.4.7

PS:涉及到 groovy 脚本也算是一个有效的解决方案,只是我不知道 groovy 在这里如何参与。

【问题讨论】:

    标签: ant ivy


    【解决方案1】:

    实际上,这很简单,并且已经记录在 Ivy 中(查看页面底部附近)。你可以使用[orgPath]:

    <ivy:retrieve conf="compile"
        type="jar,bundle"
        sync="true"
        pattern="${local-maven2-dir}/[orgPath]/[module]-[revision].[ext]"/>
    

    【讨论】:

    【解决方案2】:

    以下示例使用 groovy。

    David W. 提供了一个更简单的解决方案,它依赖于 ivy 2.3 中引入的新“orgPath”模式令牌。

    示例

    产生以下输出

    ├── build
    │   ├── com
    │   │   └── yahoo
    │   │       └── platform
    │   │           └── yui
    │   │               └── yuicompressor
    │   │                   └── 2.4.7
    │   │                       └── yuicompressor-2.4.7.jar
    │   └── rhino
    │       └── js
    │           └── 1.6R7
    │               └── js-1.6R7.jar
    ├── build.xml
    └── ivy.xml
    

    build.xml

    <project name="demo" default="retrieve" xmlns:ivy="antlib:org.apache.ivy.ant">
    
        <target name="resolve">
            <ivy:resolve/>
            <ivy:cachepath pathid="build.path" conf="build"/>
        </target>
    
        <target name="retrieve" depends="resolve">
            <taskdef name="groovy" classname="org.codehaus.groovy.ant.Groovy" classpathref="build.path"/>
    
            <ivy:artifactproperty conf="compile" name="index.[module].[artifact]" value="[module].[artifact]"/>
            <ivy:artifactproperty conf="compile" name="[module].[artifact].organisation" value="[organisation]"/>
            <ivy:artifactproperty conf="compile" name="[module].[artifact].module" value="[module]"/>
            <ivy:artifactproperty conf="compile" name="[module].[artifact].artifact" value="[artifact]"/>
            <ivy:artifactproperty conf="compile" name="[module].[artifact].revision" value="[revision]"/>
            <ivy:artifactproperty conf="compile" name="[module].[artifact].ext" value="[ext]"/>
            <ivy:artifactproperty conf="compile" name="[module].[artifact].cachefile" value="${ivy.cache.dir}/[organisation]/[module]/jars/[artifact]-[revision].[ext]"/>
    
            <groovy>
                modules = properties.findAll { it.toString().startsWith("index.") }
    
                modules.each { key, value ->
                    def organisation = properties[value+".organisation"].replace(".","/")
                    def module = properties[value+".module"]
                    def artifact = properties[value+".artifact"]
                    def revision = properties[value+".revision"]
                    def ext = properties[value+".ext"]
                    def cachefile = properties[value+".cachefile"]
    
                    ant.copy(file:cachefile, tofile:"build/${organisation}/${module}/${revision}/${artifact}-${revision}.${ext}")
                }
            </groovy>
        </target>
    </project>
    

    ivy.xml

    <ivy-module version="2.0">
        <info organisation="com.myspotontheweb" module="demo"/>
    
        <configurations>
            <conf name="build"   description="Build dependencies"/>
            <conf name="compile" description="Compile classpath"/>
        </configurations>
    
        <dependencies>
            <!-- build dependencies -->
            <dependency org="org.codehaus.groovy" name="groovy-all" rev="2.1.1" conf="build->default"/>
    
            <!-- compile dependencies -->
            <dependency org="com.yahoo.platform.yui" name="yuicompressor" rev="2.4.7" conf="compile->default"/>
        </dependencies>
    
    </ivy-module>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-06-22
      • 1970-01-01
      • 2011-10-05
      • 1970-01-01
      • 2012-12-19
      • 1970-01-01
      • 2020-08-22
      • 2021-01-22
      相关资源
      最近更新 更多