【问题标题】:How can I add Snapshot and test variations to my ivy.xml如何将快照和测试变体添加到我的 ivy.xml
【发布时间】:2011-03-02 04:42:49
【问题描述】:

我正在使用 ant+ivy+nexus 来构建和发布我的 java OSGi 项目(如果您不熟悉 OSGi,则只是好的旧 jar)。在与新技术接触时通常的思维融化期过后,我有了一个主要功能性的系统。但是,我现在有工件变化的两个维度:快照/发布和主/测试。

主要/测试维度确实不言自明。快照/发布对于以 maven 友好的方式发布到 nexus 是必不可少的。 (对于与开源 OSGi 运行时集成非常有用)。因此,我在每个项目的基础上都有以下工件,并且我有很多很多项目:

  • project-revision.xml (bp)
  • project-test-revision.xml (b)
  • project-revision-SNAPSHOT.xml (bp)
  • project-test-revision-SNAPSHOT.xml (b)

b = 成功构建 p = 成功发布 (我还没有正确发布测试内容)

在我的构建脚本中没有到处重复代码的情况下,我花了一段时间才做到这一点,但我已经做到了……有一个很大的警告。对于 SNAPSHOT 分支,我将“-SNAPSHOT”附加到所有修订版。在 ant 中,我设法以编程方式实现了这一点,但对于 ivy,我使用的是重复的 ivy.xml;常春藤-SNAPSHOT.xml。这有

<info ... revision="x.x-SNAPSHOT">

注意 -SNAPSHOT。没有这个,我永远无法得到我的

<ivy:deliver>
<ivy:resolve>
<ivy:publish>

正确发布工件和 maven pom 的命令链。 (记住我有一个要求让这个 maven 友好......如果我真的最终使用 maven 来构建它,我会被诅咒的!)

现在我一直在介绍测试/主要维度。理想情况下,我希望发布

project-test-revision(-SNAPSHOT).jar

(注意可选的快照)。我真的不想通过指定来做到这一点

<info ... module="project-test" ... >

与另一个常春藤文件中的&lt;info ... module="project" ... &gt; 不同。如果我走这条路(就像我已经开始一样),那么我最终会得到大量的 ivy-Option1-Option2...-OptionN.xml 文件。每个新的双值变体都会使构建和常春藤文件的数量增加一倍。那是废话。一定有更好的方法。我就是找不到。

如果您已经成功地从一个 ivy 文件中获得了带有修饰名称的 ivy 发布工件,您介意发布实现此目的的配置 sn-ps 吗?会非常有用。 (不要忘记 maven 不知道配置,所以我需要将变体放入文件名和 pom 中)。

非常感谢

阿拉斯泰尔

【问题讨论】:

    标签: configuration ant publish ivy


    【解决方案1】:

    好的,更新:我现在已经发布了工件。当我让测试配置扩展默认配置时,我有点挣扎。我会在发布过程中抱怨默认配置工件不存在……这是我在仅发布测试用例时不关心的事情。通过使它们独立但重叠,我可以重新控制要发布的内容。

    但是!!!!!!没有可行的测试 pom - 那还没有发布。好吧,实际上它确实发布了,但它包含非测试用例的数据。所以这仍然不是 Maven 友好的。如果有人对此有建议,那就太好了。

    不管怎样,我现在正在使用的代码,以防它对你也有帮助:

    ivy.xml:

    <info
        organisation="MY_ORGANISATION"
        module="MY_PROJECT"
        status="integration"
        revision="1.0-SNAPSHOT">
    </info>
    <configurations>
        <conf name="default" description="Default compilation configuration; main classes only" visibility="public"/>
        <conf name="test" description="Test-inclusive compilation configuration. Don't forget to also add Default compilation configuration where needed. This does not extend default conf" visibility="public"/>
    </configurations>
    <publications>
        <artifact name="MY_PROJECT type="jar" ext="jar" conf="default"/>  
        <artifact name="MY_PROJECT type="pom" ext="pom" conf="default"/>        
        <artifact name="MY_PROJECT-test" type="jar" ext="jar" conf="test"/>         
        <artifact name="MY_PROJECT-test" type="pom" ext="pom" conf="test"/>         
    </publications>  
    <dependencies>
        <dependency org="MY_ORGANISATION" name="ANOTHER_PROJECT" rev="1.0-SNAPSHOT" transitive="true" conf="*"/>
        <dependency org="junit" name="junit" rev="[4,)" transitive="true" conf="test->*"/>
    </dependencies>
    

    build.xml:

    <property name="project.generated.ivy.file" value="SNAPSHOT_OR_RELEASE_IVY_XML_FILE" />
    <property name="ivy.publish.status" value="RELEASE_OR_INTEGRATION" />
    <property name="project.qualifier" value="-SNAPSHOT_OR_EMPTY" />
    <property name="ivy.configuration" value="DEFAULT_OR_TEST" />
    
    <target name="publish" depends="init-publish">                  
        <ivy:deliver 
          deliverpattern="${project.generated.ivy.file}" 
          organisation="${project.organisation}" 
          module="${project.artifact}" 
          status="${ivy.publish.status}" 
          revision="${project.revision}${project.qualifier}" 
              pubrevision="${project.revision}${project.qualifier}" 
              conf="${ivy.configuration}"
    />  
    
    <ivy:resolve conf="${ivy.configuration}" />
    
    <ivy:makepom 
        ivyfile="${project.generated.ivy.file}" 
        pomfile="${project.pom.file}"
    />
    
    <ivy:publish 
        resolver="${ivy.omnicache.publisher}" 
        module="${project.artifact}"
        organisation="${project.organisation}"
        revision="${project.revision}${project.qualifier}"
        pubrevision="${project.revision}${project.qualifier}"
        pubdate="now" 
        overwrite="true"  
        publishivy="true" 
        status="${ivy.publish.status}"
        artifactspattern="${project.artifact.dir}/[artifact]-[revision](-[classifier]).[ext]"
        conf="${ivy.configuration}"                 
    />
            </target> 
    

    【讨论】:

      猜你喜欢
      • 2022-01-18
      • 2020-02-19
      • 1970-01-01
      • 2020-02-24
      • 1970-01-01
      • 2022-11-13
      • 1970-01-01
      • 2011-12-08
      • 1970-01-01
      相关资源
      最近更新 更多