2

Ant を使用して /dist フォルダーにビルドする素敵な Java プロジェクトを作成しました。
プロジェクト全体がバージョン管理されているので、dist フォルダーへのパスで「svn export」するだけで最新バージョンをデプロイできます。
しかし、私のビルドは、dist フォルダー内の .svn フォルダーとそのすべての依存関係を削除し続けます。これは、単に上書きするのではなく、ビルド時にフォルダーを消去するためです。正確な原因は、私の mac.app バンドルを構築する Ant タスクである JarBundler です。再作成する前に、バンドルのフォルダ全体を削除します。
すべての .svn フォルダーがそのフォルダーに見つからないため、競合していると表示されるため、これは明らかに私の svn を台無しにします。

どうすればこれを解決できるかについてのアイデアはありますか? jarbundler がすべてを削除するのを止める方法がわからないので、もっとハックなことをしなければならないのではないかと心配しています。参考までに、私もAntにはかなり慣れていません。

4

5 に答える 5

3

ソース管理システムをすべての一意の参照にしたい場合は、ソース管理に dist を含めることをお勧めします。

  • 開発者
  • アセンブラ (単体テスト)
  • ホモロゲーション テスター (統合プラットフォームで一連の dist にクエリを実行し、そこで非回帰テスト、パフォーマンス テスト、ストレス テストなどを実行します)
  • プロダクション リリース マネージャー ...

ただし、これを実現するには、適切なリリース プロセスが必要です。

あなたの場合、ビルドは別のプライベート ディレクトリにある必要があります。これは、Subversion にないディレクトリです。ビルドに問題がなければ、それが公式リリースの場合は Subversion にインポートします。次のチームが必要とするだけの一時的なビルドの場合は、共有ディレクトリにインポートします (したがって、何百ものビルドを SCM にコミットすることを回避します)。スペースを無駄に使用します)。

注: SCM に配信 (dist) を含めることの主な利点は、依存プロジェクトがソースではなく、配信 (いずれかの時点で本番環境に移行することになります) と直接連携できるようにすることです。彼らのコードを機能させるには、あなたの配信でコンパイルすることで、あなたと一緒に展開すると、彼ら自身のディストリビューションが機能する可能性があります。
そうすれば、他のチームは、ソースにアクセスするときに、配信 (「myProject.jar」) にアクセスします。SCM を介して、jar のバージョン、日付、履歴、メタデータ、ラベルなどを読み取ることができます。すぐ。

ただし、1 つの小さなモノリシック (「他のプロジェクトがそれに依存していない」) プロジェクトの場合、dist (最終的なパッケージ化された配信)をオンデマンドで再構築し、外部参照システムに外部参照システムとして保存できると主張できます。たとえば、Maven リポジトリ。
しかし、Maven は SCM リポジトリではありません。つまり、jar ('MyProject-1.0.jar') に署名する必要があり、履歴がなく、すべてのメタデータを配信に沿って別のテキスト ファイルで報告する必要があります。その Maven リポジトリでその配信にアクセスする他のプロジェクトは、バージョンの命名規則に従ってスクリプトとクラスパスを調整する必要があります。
さらに、Maven は開発アーキテクチャのもう 1 つのリポジトリです。リポジトリの数を最小限 ('1' ;) に抑えることができる場合はいつでも、それはより良いことです。

于 2008-10-21T06:17:07.937 に答える
0

よし、みんなありがとう。ビルドを SCM から除外することが哲学的に良い考えである理由がわかりました。将来のためにそれを心に留めておきます。ただし、実際には、この場合、この短い (4 週間) プロジェクトの開発者は私だけです。私は svn を使用して、公開 Web サーバー上のリリース ビルドを簡単に更新しています。低速接続を介して、差分更新が不可欠です。リモート展開ビルドを更新するための簡単な代替手段を誰も提案しなかったので、私の問題を回避するためにこのハックハックを思いつきました:

バージョン管理されたビルド フォルダーが /dist だとします。さて、ビルド スクリプトに /dist-tmp にビルドするように指示し、次に /dist-tmp からすべてのファイルを /dist の上に再帰的にコピーし、最後に /dist-tmp を削除します。

これは私の Ant ビルド スクリプトに追加された数行であり、うまく機能します。

ただし、次回は、展開ホストが Windows でないことを確認してから、単純な rsync スクリプトでうまくいくので、ビルドを SCM から除外できます。

@VonC は、哲学の最良の説明の答えをチェックします。

于 2008-10-21T22:54:13.353 に答える
0

単純。/dist をバージョン管理にチェックインしないでください。

バージョン管理には、生成されたコード/バイナリ/jars/what-have-you が含まれていてはなりません。

于 2008-10-21T06:06:24.137 に答える
0

おそらく、ここで何かが欠けていると思いますが、ビルドされた製品をソース管理システムにチェックインするのはなぜですか? 一般に、それは良い習慣とは見なされません。

ビルド製品をチェックインしたい場合は、それらを別の場所 (おそらく "pre-built" と呼ばれるディレクトリ) にコピーし、そこからチェックインします。

追加するために編集:これを行う必要がない理由は、現在のソースを考えると、単一のビルドコマンドでディストリビューションを再作成できるはずだからです。

于 2008-10-21T06:09:39.993 に答える
0

ビルドされた製品をSVNに入れるのはあまり良い習慣ではないことに同意します。

そうは言っても、これを行うために回避できない要件がある場合は、Git、Bazaar、および Darcs などの最新のバージョン管理システムのいずれかを使用できます (他にもありますが、私はこれら 3 つを使用しました)。

これらの 3 つすべては、バージョン管理メタデータをルート ディレクトリに配置するだけなので、サブフォルダーにはメタデータがないため、この問題は発生しないと思います...

于 2008-11-14T11:08:45.573 に答える