2011-12-05 12 views
1

私は50のプロジェクト(他人が所有)から20個のアイビープロジェクトを所有しています。antスクリプトを使用して私のすべてのプロジェクトのアイビーリビジョンを自動化

問題はリリース中です。手動で20枚のivyファイルのバージョンを増やし、ファイルをチェックインしてバイナリをビルドする必要があります。時間がかかります。日食の発見と交換は助けになるが。 antを使用して自動化する

手順:

1)単独のツタファイルをチェックアウト。 2)スクリプト/ロジックを使用して、自分のモジュールのみのバージョン/ myモジュールのバージョンを相互に変更します。 3)ファイルをチェックインします。 4)リリースのためにブランチにタグを付けます。

ステップ2でスタックしておくと、すべて比較的簡単です。

xmlタスクを試しましたが、正確なインデックスを何度か知っているわけではありません。

あなたのお手伝いをお待ちしております。

+0

自分のリビジョン番号、またはあなたが参照している依存関係の1つについて質問しているかどうかはわかりません。あなたは常にivy記述子の中でantのプロパティを使うことができるので、これを使って独自のリビジョンを指定することができます。 –

+0

Joeriに感謝します。私は依存ファイルのバージョンを参照しています。

答えて

0

は、以下の可能な解決策を自分で見つけかかわらなど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> 

上記のターゲットは、バージョンを解析して変更します。

1

常に最新のリリースを使用したい場合は、version ranges in dependenciesを使用することを考えましたか?新しいリリースのファイルを編集する必要はもうありません。

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

ありがとう@Arne。私は、アセンブリと出版サーバがそれを探しているときに特定のバージョンを与える必要があります。 –

3

あなたのアイビーファイルでdynamic revision numbersを使用したことはありますか?

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

Ivyは、ivyリポジトリに公開されているivy.xmlファイルのこれらの依存関係を巧妙に解決します。

buildnumber BuildNumberを生成する

使用ツタは、すでに発表されてきたバージョンに基づいて、シーケンス内の次の番号を生成し、非常に巧妙な作業です。ビルド順序

別のツタマルチモジュール先端を制御

は、あなたのモジュールが組み込まれている順序を制御するbuildlistタスクを使用することです。各サブモジュールのivyファイルで宣言された相互依存関係に基づいて動作します。これにより、latest.releaselatest.integrationのリビジョンで期待されるリビジョンが見つかることになります。

私は公開するときに、これは(通常は自動的に行われますが、MavenのPOMファイルを生成するときに、時にはあなたは、たとえば、実際に使用され、実際のバージョンを確認する必要があります言ったように、ダイナミック改正

の解決Mavenレポ)。

以下の実施例は、ツタを拡張動的リビジョンとMavenのPOMを作成するmakepomタスクを実現使用。

<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> 
+0

ありがとう@マーク。動的バージョン番号を使用できません。ビルドオーダーはすでに注意を払っています。 –

関連する問題