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