Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/ant/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Configuration 如何将快照和测试变体添加到我的ivy.xml中_Configuration_Ant_Publish_Ivy - Fatal编程技术网

Configuration 如何将快照和测试变体添加到我的ivy.xml中

Configuration 如何将快照和测试变体添加到我的ivy.xml中,configuration,ant,publish,ivy,Configuration,Ant,Publish,Ivy,我正在使用ant+ivy+nexus构建和发布我的JavaOSGi项目(如果您不熟悉OSGi,请使用好的旧JAR)。在经历了通常的思想融化期之后,当一个人接触新技术时,我已经有了一个功能性很强的系统。但是,我现在有了工件变化的两个维度:快照/发布和主/测试 主/测试维度本身就说明了这一点。快照/发布对于以maven友好的方式发布到nexus是必不可少的。(对于与开源OSGi运行时的集成非常有用)。因此,我每个项目都有以下工件,我有很多项目: project-revision.xml(bp) p

我正在使用ant+ivy+nexus构建和发布我的JavaOSGi项目(如果您不熟悉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”。在ant中,我通过编程实现了这一点,但对于ivy,我使用了一个重复的ivy.xml;ivy-SNAPSHOT.xml。这有

<info ... revision="x.x-SNAPSHOT">
(请注意可选快照)。我真的不想通过指定

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

与另一个常春藤文件中的
相反。如果我走这条路(就像我已经开始了一样),那么我只会得到大量的ivy-Option1-Option2…-OptionN.xml文件。每增加一个新的双值变量,构建文件和常春藤文件的数量就会增加一倍。那是废话。一定有更好的办法。我就是找不到

如果您已经成功地从一个ivy文件中获得了带有修饰名称的ivy发布工件,您介意发布实现这一点的配置片段吗?这将非常有用。(别忘了maven不知道配置,所以我需要在文件名和pom中添加变体)

非常感谢


阿拉斯泰尔

好的,更新:我现在发布了工件。当我让测试配置扩展默认配置时,我有点挣扎。在发布过程中,我会收到一个抱怨,默认配置工件不存在。。。当我只发布测试用例时,我不关心的事情。通过使它们独立但重叠,我重新获得了对发布内容的细粒度控制

但是!!!!!目前还没有可行的测试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> 

好的,更新:我现在已经发布了工件。当我让测试配置扩展默认配置时,我有点挣扎。在发布过程中,我会收到一个抱怨,默认配置工件不存在。。。当我只发布测试用例时,我不关心的事情。通过使它们独立但重叠,我重新获得了对发布内容的细粒度控制

但是!!!!!目前还没有可行的测试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>