9

Java Webアプリケーションでリビジョン番号を表示/使用する最良の方法は何ですか?

ant を使用して .war アーカイブを構築するだけで、buildserver などは使用しません。$ref の場合、リソース ファイルに書き込むことができる何らかの種類があればいいのですが、これは、問題のファイルがコミットされたときにのみ更新されます。私はそれを世界的に必要としています。

あなたは何をお勧めします?特定のファイルを更新するポストコミットトリガー? カスタム ant スクリプト? これを行うためのより非ハックな方法はありますか? または、svn とは独立した独自のバージョン番号を使用することをお勧めします。

編集:素晴らしい提案です!答えてくれてありがとう!

4

6 に答える 6

6

次の Ant タスクを使用して、使用されている他のパッケージのバージョンとともに、svn バージョンを jar の属性に含めます。

<target name="package" depends="compile" description="Package up the project as a jar">
<!-- Create the subversion version string -->
<exec executable="svnversion" failifexecutionfails="no" outputproperty="version">
  <arg value="."/> 
  <arg value="-n"/>
</exec>
<!-- Create the time stamp -->
<tstamp>
  <format property="timeAndDate" pattern="HH:mm d-MMMM-yyyy"/>
</tstamp>

<jar destfile="simfraserv.jar">
  <manifest>
    <attribute name="Built-By"                value="${user.name} on ${time.date}" />
    <attribute name="Implementation-Version"  value="${svn.version}" />
    <attribute name="Implementation-Java"     value="${java.vendor} ${java.version}" />
    <attribute name="Implementation-Build-OS" value="${os.name} ${os.arch} ${os.version}" />
    <attribute name="JVM-Version"             value="${common.sourcelevel}+" />        
  </manifest>
  <fileset dir="bin">
    <include name="**/*.class"/>
  </fileset>
  <fileset dir="src">
    <include name="**"/>
  </fileset>
</jar>
</target>

そして、このようにwebappでアクセスできます

String version = this.getClass().getPackage().getImplementationVersion();
于 2008-10-04T21:16:17.487 に答える
4

ant を使用している場合は、このタスクを定義できます。

 <target name="version">
<exec executable="svn" output="svninfo.xml" failonerror="true">
  <arg line="info --xml" />
</exec>
<xmlproperty file="svninfo.xml" collapseattributes="true" />
<echo message="SVN Revision: ${info.entry.commit.revision}"/>
<property name="revision" value="${info.entry.commit.revision}" />
</target>

そして、あなたが望むリビジョン値。

于 2012-07-11T16:34:37.783 に答える
3

これを実行できるAntタスクがいくつかあります。

tigrisのSvnAntタスクが最も古いものです。

ドキュメントはここにあります-特にinfo、Subversionリポジトリのリビジョン番号をそれが呼び出すAntプロパティとして公開する要素を見てくださいrev。通常のAnt置換メカニズムを使用して、この値をリソースファイルに書き込むことができます。

誰かがグーグルコードホスティングに同様の(より単純な)タスクを設定しました-コメントすることはできませんが、それを使用したことはありません。

ビルドにすでにAntが含まれている場合、これらのいずれかが私にとって最も適切な方法のように思えます。

于 2008-10-03T14:19:02.463 に答える
1

このスレッドを参照してください。

$Id:$そのスレッドでの私のお気に入りは、リビジョン ID が必要なコードをダンプすることです。SVN は、エクスポートを行うときに実際のデータを入力します。

于 2008-10-03T10:56:22.053 に答える
1

Windows を使用している場合は、tortoise に付属の SubWCRev.exe を見ることができます。

現在のリポジトリのリビジョンを提供し、$WCREV$ を前述のものに置き換えます。これをコンテキスト パラメータとして web.xml に含めて、そこから取得できます。

于 2008-10-03T11:15:50.283 に答える
0

webapp がパッケージ化される前に、svn info を実行し、出力を WEB-INF/classes 内のファイルにリダイレクトします。webapp が起動したら、このファイルを解析し、サーブレット コンテキストまたは同様の場所に隠しておきます。すべてのページのフッターに、このバージョンを表示します。Tiles や SiteMesh などを使用している場合、この変更は 1 つのファイルでのみ行う必要があります。

Maven ユーザーは maven-buildnumber プラグインを試すことができます。

于 2008-10-04T05:12:58.617 に答える