Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/344.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

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
Java 使用ant脚本为我的所有项目自动增加常春藤版本_Java_Ant_Ivy - Fatal编程技术网

Java 使用ant脚本为我的所有项目自动增加常春藤版本

Java 使用ant脚本为我的所有项目自动增加常春藤版本,java,ant,ivy,Java,Ant,Ivy,在50个其他项目中,我拥有20个常春藤项目(由他人拥有),我在项目中使用了他们的二进制文件的一些版本 问题是在发布期间,我必须手动增加我的20个常春藤文件的版本,签入文件并构建二进制文件。这很费时。尽管eclipse查找和替换有帮助 使用ant实现自动化的步骤: 1) 单独检查常春藤文件。 2) 使用脚本/逻辑仅更改我的模块/我的模块相互依赖的版本。 3) 签入文件。 4) 标记要释放的分支 停留在步骤2休息都相对容易 尝试了xml任务,但在搜索方面面临挑战,因为有时我们不知道确切的索引 感谢您

在50个其他项目中,我拥有20个常春藤项目(由他人拥有),我在项目中使用了他们的二进制文件的一些版本

问题是在发布期间,我必须手动增加我的20个常春藤文件的版本,签入文件并构建二进制文件。这很费时。尽管eclipse查找和替换有帮助

使用ant实现自动化的步骤:

1) 单独检查常春藤文件。 2) 使用脚本/逻辑仅更改我的模块/我的模块相互依赖的版本。 3) 签入文件。 4) 标记要释放的分支

停留在步骤2休息都相对容易

尝试了xml任务,但在搜索方面面临挑战,因为有时我们不知道确切的索引


感谢您的帮助。

如果您一直想使用最新版本,是否考虑过使用?将不再需要为新版本编辑文件。spring core的外观如下所示:

<dependency org="org.springframework" name="spring-core" rev="[2.5,4.0[" conf="optional->default"/>

如果您一直想使用最新版本,是否考虑过使用?将不再需要为新版本编辑文件。spring core的外观如下所示:

<dependency org="org.springframework" name="spring-core" rev="[2.5,4.0[" conf="optional->default"/>

您是否考虑过在您的常春藤文件中使用

<dependency org="myorg" name="myname1" revision="latest.release"/>
<dependency org="myorg" name="myname2" revision="latest.integration"/>

Ivy将在发布到Ivy存储库的Ivy.xml文件中巧妙地解决这些依赖关系

使用常春藤生成buildnumber 这是一个非常聪明的任务,它根据您已经发布的版本生成序列中的下一个数字

控制构建顺序 另一个常春藤多模块技巧是使用任务来控制模块的构建顺序。它基于每个子模块的ivy文件中声明的相互依赖关系工作。这确保了最新的.release最新的.integration版本将找到预期的版本

解决动态修订 正如我所说,这通常是自动完成的,但有时您需要实际查看使用的真实版本,例如,在生成Maven POM文件时(发布到Maven repo时)

以下示例使用ivydelivermakepom任务创建Maven POM,并扩展动态修订

<target name="generate-pom">
    <ivy:deliver deliverpattern="${build.dir}/ivy.xml" pubrevision="${publish.revision}" status="${publish.status}"/>
    <ivy:makepom ivyfile="${build.dir}/ivy.xml" pomfile="${build.dir}/${ivy.module}.pom"/>
</target>

<target name="publish" depends="build,generate-pom">
    <ivy:publish resolver="${publish.resolver}" pubrevision="${publish.revision}" overwrite="true" publishivy="false" >
        <artifacts pattern="${build.dir}/[artifact](-[classifier]).[ext]"/>
    </ivy:publish>
</target>

您是否考虑过在您的常春藤文件中使用

<dependency org="myorg" name="myname1" revision="latest.release"/>
<dependency org="myorg" name="myname2" revision="latest.integration"/>

Ivy将在发布到Ivy存储库的Ivy.xml文件中巧妙地解决这些依赖关系

使用常春藤生成buildnumber 这是一个非常聪明的任务,它根据您已经发布的版本生成序列中的下一个数字

控制构建顺序 另一个常春藤多模块技巧是使用任务来控制模块的构建顺序。它基于每个子模块的ivy文件中声明的相互依赖关系工作。这确保了最新的.release最新的.integration版本将找到预期的版本

解决动态修订 正如我所说,这通常是自动完成的,但有时您需要实际查看使用的真实版本,例如,在生成Maven POM文件时(发布到Maven repo时)

以下示例使用ivydelivermakepom任务创建Maven POM,并扩展动态修订

<target name="generate-pom">
    <ivy:deliver deliverpattern="${build.dir}/ivy.xml" pubrevision="${publish.revision}" status="${publish.status}"/>
    <ivy:makepom ivyfile="${build.dir}/ivy.xml" pomfile="${build.dir}/${ivy.module}.pom"/>
</target>

<target name="publish" depends="build,generate-pom">
    <ivy:publish resolver="${publish.resolver}" pubrevision="${publish.revision}" overwrite="true" publishivy="false" >
        <artifacts pattern="${build.dir}/[artifact](-[classifier]).[ext]"/>
    </ivy:publish>
</target>

我自己找到了以下可行的解决方案,但尝试了其他选项,如通过IvyJava解析ivy.xml等

<target name="autoincrementivy" depends="prompt-user.password">
    <exec executable="svn" failonerror="${svn.failonerror}">
        <arg value="--non-interactive"/>
        <arg value="--trust-server-cert"/>
        <arg value="--username"/>
        <arg value="${svn.user}"/>
        <arg value="--password"/>
        <arg value="${svn.password}"/>
        <arg value="checkout"/>
        <arg value="--depth"/>
        **<arg value="immediates"/>**
        <arg value="${svn.repository}/@{module.name}/trunk"/>
         <arg value="${temp.checkout.dir}/@{module.name}"/>
    </exec>
<move file="${temp.checkout.dir}/ivy.xml" tofile="${temp.checkout.dir}/ivy_src.xml"/>
<ant target="changeVersion" antfile="../deploy.xml" >
   <property name="dest.file" value="${temp.checkout.dir}/ivy.xml"/>
  <property name="src.file" value="${temp.checkout.dir}/ivy_src.xml"/>
  <property name="target.version" value="${tag.version}"/>
</ant>
<!-- cehckin the file-->
</target>

****
上面的任务是将文件签出到带有.svn文件夹的临时文件夹中,以便cehckin正常工作

    <target name="changeVersion">

    <xmltask source="${src.file}" dest="${dest.file}" preserveType="true" >
        <replace path="/ivy-module/info/@revision" withText="${target.version}" />
        <replace path="/ivy-module/dependencies/dependency[@name='my-common']/@rev"       withText="${target.version}" /> 
<replace path="/ivy-module/dependencies/dependency[@name='my-gui-common']/@rev" withText="${target.version}" /> 
        </xmltask>  
        <fixcrlf file="${src.file}" eol="cr" />
    </target>


上面的目标是解析和更改版本。

我自己找到了以下可行的解决方案,但尝试了其他选项,如通过ivy java解析ivy.xml等

<target name="autoincrementivy" depends="prompt-user.password">
    <exec executable="svn" failonerror="${svn.failonerror}">
        <arg value="--non-interactive"/>
        <arg value="--trust-server-cert"/>
        <arg value="--username"/>
        <arg value="${svn.user}"/>
        <arg value="--password"/>
        <arg value="${svn.password}"/>
        <arg value="checkout"/>
        <arg value="--depth"/>
        **<arg value="immediates"/>**
        <arg value="${svn.repository}/@{module.name}/trunk"/>
         <arg value="${temp.checkout.dir}/@{module.name}"/>
    </exec>
<move file="${temp.checkout.dir}/ivy.xml" tofile="${temp.checkout.dir}/ivy_src.xml"/>
<ant target="changeVersion" antfile="../deploy.xml" >
   <property name="dest.file" value="${temp.checkout.dir}/ivy.xml"/>
  <property name="src.file" value="${temp.checkout.dir}/ivy_src.xml"/>
  <property name="target.version" value="${tag.version}"/>
</ant>
<!-- cehckin the file-->
</target>

****
上面的任务是将文件签出到带有.svn文件夹的临时文件夹中,以便cehckin正常工作

    <target name="changeVersion">

    <xmltask source="${src.file}" dest="${dest.file}" preserveType="true" >
        <replace path="/ivy-module/info/@revision" withText="${target.version}" />
        <replace path="/ivy-module/dependencies/dependency[@name='my-common']/@rev"       withText="${target.version}" /> 
<replace path="/ivy-module/dependencies/dependency[@name='my-gui-common']/@rev" withText="${target.version}" /> 
        </xmltask>  
        <fixcrlf file="${src.file}" eol="cr" />
    </target>


上面的目标是解析和更改版本。

我不清楚您是询问自己的修订号,还是您所指的依赖项之一。请记住,您始终可以在常春藤描述符中使用ant属性,因此您可以使用它来指定自己的修订版。谢谢Joeri。我指的是依赖项文件的版本。我不清楚您是否询问自己的修订号,或者您所指的依赖项之一。请记住,您始终可以在常春藤描述符中使用ant属性,因此您可以使用它来指定自己的修订版。谢谢Joeri。我指的是依赖项文件的版本。谢谢@Arne。我需要提供特定的版本,因为我们的程序集和发布服务器正在查找它。谢谢@Arne。我需要提供特定的版本,因为我们的程序集和发布服务器正在查找它。谢谢@Mark。无法使用动态版本号。建造顺序已经处理好了。谢谢@Mark。无法使用动态版本号。建造顺序已经处理好了。