8

バグレポートまたは機能しないメッセージを受け取ったとき、私の最初の質問の1つは、常にどのバージョンですか?さまざまなビルドがテストの多くの段階にあるため、これを計画および展開することは、多くの場合、重要な質問です。

Java JAR(ear、jar、rar、war)ファイルをリリースする場合、JARを調べて、リリースされたJARのソースと同じブランチ、バージョン、またはタグに切り替えることができるようにしたいと思います。

svnチェックアウトのバージョン情報が作成されたビルドに残るようにantビルドプロセスを最適に調整するにはどうすればよいですか?

私は次のように考えていました:

  • VERSIONファイルを追加しますが、どのような内容ですか?
  • 情報をMETA-INFファイルに保存しますが、どのプロパティの下でどのコンテンツを使用しますか?
  • ソースを結果アーカイブにコピーする
  • コンパイラが残した場所にキーワードを含むすべてのソースにsvn:propertiesを追加しました

現在のファイル/ディレクトリを調べるだけのsvninfoとは対照的に、サブツリー全体をスキャンするため、svnversionアプローチ(受け入れられたanwser)を使用することになりました。このために、antファイルでSVNタスクを定義して、移植性を高めました。

<taskdef name="svn" classname="org.tigris.subversion.svnant.SvnTask">
  <classpath>
    <pathelement location="${dir.lib}/ant/svnant.jar"/>
    <pathelement location="${dir.lib}/ant/svnClientAdapter.jar"/>
    <pathelement location="${dir.lib}/ant/svnkit.jar"/>
    <pathelement location="${dir.lib}/ant/svnjavahl.jar"/>
  </classpath>        
</taskdef>

すべてのビルドがWebサービスになるわけではありません。アプリケーションサーバーで更新されるため、デプロイ前のearファイルは同じ名前のままにする必要があります。ファイルを実行可能にすることはまだオプションですが、それまではバージョン情報ファイルを含めるだけです。

<target name="version">
  <svn><wcVersion path="${dir.source}"/></svn>
  <echo file="${dir.build}/VERSION">${revision.range}</echo>
</target>

参照:
svnrevision:http
://svnbook.red-bean.com/en/1.1/re57.html svn info http://svnbook.red-bean.com/en/1.1/re13.html
subclipse svn task:http: //subclipse.tigris.org/svnant/svn.html
svnクライアント:http ://svnkit.com/

4

9 に答える 9

5

Ant スクリプトでsvnversionコマンドを使用して、リビジョン番号を取得します。

<exec executable="svnversion" outputproperty="svnversion" failonerror="true">
  <env key="path" value="/usr/bin"/>
  <arg value="--no-newline" />
</exec>

次に、EAR のどこかで${svnversion}プロパティを使用します。EAR ファイル名に入れましたが、EAR 内の readme またはバージョン ファイルに入れたり、EAR のMETA-INF/manifest.mfでバージョンを指定したりすることもできます。

<!-- myapp-r1234.ear -->
<property name="ear" value="myapp-r${svnrevision}.ear" />
于 2008-10-05T12:52:18.377 に答える
4

Subversion ブランチとリポジトリ番号を提供する必要があります。現在の Subversion ビルド番号にアクセスする方法で説明したように? svn infoコマンドはこの情報を提供します。この情報を使用して、VERSION ファイルを作成したり、*AR ファイルに作成している他のファイルに配置したりできます。他に何も考えていない場合は、XmlProperty Ant タスクを使用して、svn info --xml コマンドの出力から関連情報を抽出することを検討できます。

于 2008-10-05T11:55:29.943 に答える
3

jreleaseinfoプロジェクトをチェックしてください。プロジェクトのリリース情報を表示するために実行時に呼び出すことができるJavaクラスを生成できるANTタスクが含まれています。

私はそのシンプルさが好きです。

于 2010-04-02T11:20:35.073 に答える
2

この質問も参照してください: Java プロジェクトのビルドとバージョン番号付け (ant、cvs、hudson)

役立つコード スニペットがいくつか含まれています。

于 2010-05-21T21:35:15.127 に答える
1

頭のてっぺんから。各jarビルドのタグ?

于 2008-10-05T11:51:44.850 に答える
1

ビルドの最初の部分で、パッケージのルートに version.txt ファイルを作成し、(この場合は) CVS からコードをチェックアウトするために使用されるタグをダンプします...さらに、ビルド プロセスの最後の部分でチェックを行います。後で参照できるように、完全に構築された EAR を CVS に戻します。

そうすれば、Web アプリケーションに問題が発生した場合 (レポーターに /app/version.txt にアクセスするように依頼した場合にすぎません)、そこから CVS の特定のビルド履歴をドリルダウンして、関連するコンポーネントを見つけることができます (さまざまなバージョンを処理します)。アプリ内のライブラリの数) を調べて、エラーを見つけます。

これが私たちのサポート担当者にとってどれほど役立つかはわかりませんが、そこにいないことについて彼らが不平を言っていることは間違いありません!

于 2008-10-05T11:55:26.603 に答える
1

自動ビルドを実行し、ビルドが成功したときに (もちろんユニットテストを使用して) コードベースにタグ (日付スタンプ付き) を配置します。

配信プロセスでは、タグ付けされたビルドのみを顧客に配信します。このようにして制御でき、タグ名を readme.txt のどこかに配置するか、ear ファイルのファイル名にタグ名を反映させることができます。

私は個人的に CVS に戻しましたが、これが理由の 1 つです。CVS では、クラスにタグを報告させることができます。私のすべてのjarファイルには、それらを実行可能にする「メイン」が含まれています。サポートの質問では、顧客に「java -jar somejar.jar」を実行して、質問と一緒に出力を送信するように依頼します。

このようにして、彼らが使用しているビルドを確認し、Java のバージョン、OS の種類、バージョンなどの情報を入手することもできます。お客様が奇妙な​​質問に答える必要がなくなります。

シンプルですがとても効果的です。

于 2008-10-05T11:57:00.220 に答える
1

ビルド番号をプロパティ ファイルに入れてみませんか...これは Java によって簡単に読み取られ、ヘルプに出力されます。ダイアログ (アプレット/アプリケーション)、Web ページのフッター、またはその他の GUI について。

(すべての SOF ページのフッターを参照してください...そこに SVN のバージョン番号があります。)

WAR/EAR/JAR などの簡単な時間を見るよりもロードが簡単に思えますか?

于 2008-10-05T11:59:14.850 に答える
0

完全なバージョン番号の一部として絶対リポジトリ リビジョンを保存します。これにより、特定の変更が特定のバージョンに含まれているかどうかを一目で確認できます。

また、バージョン番号/ビルド日などをカスタム プロパティとして ear のマニフェスト ファイルに保存します。これらはほとんどが情報提供のみです。また、アプリケーションが読み取れるように、jar に組み込まれているプロパティ ファイルにも保存します。

于 2008-10-20T20:49:19.080 に答える