25

JavaとSwingApplicationFrameworkを使用してデスクトップアプリを開発しています。ボックスに関するアプリケーションがあり、そのボックスにテストされているバージョンの表示を含めたいと思います。私の好みは、その値が自動化された方法で変更されることです。私はCruiseControlを使用して、SVNへのコミットからトリガーされるアプリケーションをビルドしています。

この仕事をするために他の人にどのようなメカニズムを使用しますか?ビルドプロセスでドロップできる、ボックスバージョン番号ライブラリまたはant関連ツールのセットはありますか?

展開オプションや、更新などを自動的にチェックする方法を探していません。アバウトボックスにあるバージョンをテスターに​​尋ねて、信頼できる回答を得たいだけです。

4

6 に答える 6

27

この投稿は、ApacheMavenを使用してビルドすることから始めます。Antや別のツールを使用して同様のことを行うこともできますが、これは私がMavenを使用して行ったことです。

これを処理するために私が見つけた最善の方法は、プロジェクトのバージョンとSubversionリビジョンをビルド番号として使用することです。Mavenから、以下を含めることができます。これにより、Subversionリビジョン番号が${scm.revision}として提供されます。

<build>
    <plugins>
      <plugin>
        <artifactId>maven-scm-plugin</artifactId>
        <executions>
          <execution>
            <id>getting-scm.revision</id>
            <phase>validate</phase>
            <goals>
              <goal>update</goal>
            </goals>
          </execution>
        </executions>
      </plugin>
    </plugins>
  </build>

その後、これを実装バージョンとしてjarファイルマニフェストの一部として使用します。

  <plugin>
    <artifactId>maven-jar-plugin</artifactId>
    <version>2.1</version>
    <configuration>
      <archive>
        <manifestEntries>
          <Implementation-Version>${this.version}.${scm.revision}</Implementation-Version>
        </manifestEntries>
      </archive>
    </configuration>
  </plugin>

これの良いところは、次を使用してコードからこれにアクセスできることです。

Package p = getClass().getPackage();
String version = p.getImplementationVersion();

これにより、「1.0.13525」のような完全なビルド番号が得られます。最後の番号はサブバージョンのリビジョンです。これを設定する方法の詳細については、この問題についてしばらく前に行ったブログ投稿全体を確認してください。

于 2009-04-20T22:52:22.540 に答える
7

ビルドスクリプトに、バージョンを保持するプロパティファイルを作成してもらいます。SVNから直接リビジョン番号を取得することをお勧めします。このようにして、テストで参照できます。このプロパティファイルをパッケージ化されたjarに配置し、実行時に読み取ります。通常、メジャーバージョンとマイナーバージョンがant scrptのパラメーターとして設定されていますが、リビジョンはSVNによって自動的に管理され、参照に一貫したビルド番号を提供します。

このスニペットターゲットはsvnコマンドラインを実行し、一時ファイル(svndump)に出力します。次に、xx.yy.zz文字列を作成し、後でjarに含まれる別のファイルに配置します。xx.yyは外部パラメータから取得されることに注意してください。これは、メジャー-マイナーバージョンです。

<target name="getrev">
    <exec executable="svn" output="svndump">
        <arg value="info"/>
        <arg value="${my.svn.url}"/>
    </exec>

    <property file="svndump"/>
    <property name="my.build" value="${Revision}"/>
    <property name="my.rev" value="${my.ver}.${my.build}"/>
    <echo message="current revision is ${my.rev}"/>

    <property name="my.dir.dist" value="${my.dir.root}/dist/${my.rev}"/>
    <echo message="${my.rev}" file="${my.dir.projects}/revision"/>

    <delete file="svndump"/>
</target>
于 2009-04-20T22:41:08.167 に答える
3

Mavenでは、Subversionからリビジョン番号を取得するか、シーケンスまたはタイムスタンプを使用するbuildnumber-maven-plugin${buildNumber}を使用しました。これは、プレースホルダーを好きな場所で置き換えるために使用されます。他のビルドツールや継続的インテグレーションサーバーにも同様の機能があると思います。「<your-tool>ビルド番号」でお気に入りの検索エンジンを検索します。

于 2009-04-20T22:49:40.907 に答える
3

あなたはそれを複雑にしすぎています。SVNは、CVSのように、バージョン番号をマクロとして提供します。

定数を含む単純なインターフェースを作成し、SVNに次のようなマクロを介してインスタンス化させます。

public interface IVersionNumber {
    public static final String version = "$Id$" ;
}

そのファイルでキーワードを使用するようにSVNに指示する必要があります。

$ svn propset svn:keywords "Id" IVersion.java

ここでプロパティについて読むことができます。

于 2009-04-20T22:32:27.453 に答える
1

私たちは長い間JReleaseInfoを使用してきました。Antスクリプトで設定でき(プロジェクトではMavenを使用しません)、バージョン番号が自動的にバンプされます。また、すべての情報を含むクラスを生成するという点で、いくつかの優れた追加機能があります。コード内でそのクラスを呼び出すだけで、文字列を使用できるようにするか、コマンドラインからクラスを呼び出して、コードを変更せずにバージョン番号を出力することができます。

于 2009-04-20T23:57:03.460 に答える
0

私はクルーズコントロールAntを使用してすべてを構築しているので、少なくとも今のところ、プロジェクトを構築するためのant呼び出しに渡された${label}プロパティを使用することになりました。私のantファイルでは、Antの「置換」タスクを使用して、Application.versionという名前のaboutボックスリソースを保持するプロパティファイルを変更し、そのラベルを含めます。

ラベルインクリメントからsvnラベルインクリメントに変更して、svnリビジョン番号をそのように使用することを計画しています。もう少し作業が必要で、クルーズコントロールの設定ファイルを変更する必要があります。

于 2009-04-21T13:18:52.957 に答える