2011-07-13 10 views
4

クラスパス内のスナップショットのタイムスタンプ付きバージョン(api-0.5.0-20110706.191935-1.jarなど)を使用してMavenから機能テストを実行したいと思います。しかし、Artifactoryリポジトリにタイムスタンプ付きのバージョンがあることがわかりましたが、Mavenはapi-0.5.0-SNAPSHOT.jarを参照し、ローカルリポジトリから解決しています。Maven:タイムスタンプの付いたバージョンのスナップショットをクラスパスで使用する方法を教えてください。

背景 継続的インテグレーション(CI)サーバーには2つの関連ビルドが設定されています。サーバービルドはmvn deployで実行され、新しいスナップショットは正しく構築されたリポジトリで表示されます。

最新の正しいビルドを取得し、開発サーバーにデプロイしてからテストを実行する機能テストビルドもあります。

機能テストのビルドはAPI-0.5.0-SNAPSHOT.jarに依存しているようです。サーバービルドを実行すると、ローカルリポジトリのスナップショットが置き換えられ、機能テストビルドからNoClassDeFondエラーが発生します。

したがって、タイムスタンプ付きのバージョンを使用する機能テストビルドが必要です。私は現在の承知している

オプション:

  1. POMでスナップショットリポジトリを宣言し、uniqueVersionを確保する(私はすぐにこれをしようとしてビルドを実行します)が真です。
  2. version lock:snapshotsの目標を使用して、pomのバージョンをタイムスタンプのバージョンに設定します。
  3. CIサーバーからの1回の呼び出しでサーバービルドと機能テストを実行することを検討してください。 (つまり、サーバービルドを削除する)。

答えて

1

これは簡単な答えです。CIビルドのプロジェクト間でSNAPSHOT依存関係を使用しないでください。あなたのローカルマシンでは問題ありませんが、CI環境はうまく動作しません**。 SNAPSHOTがどのように解決されたのかについては、公表されていますが、それは混乱しています。代わりに、通常の依存関係を使用して、CIをリリースするリリースジョブをリリースします。

SNAPSHOTは、(少なくともCIビルドエージェントの観点から)本質的に非決定論的であると考えるべきです。

Versions pluginは、依存関係を追跡するのに役立ちます。

**ビルドエージェントごとに異なるリポジトリを設定し、実行ごとに一掃した場合、一貫して動作することがわかった唯一の方法です。劇的で恐ろしい、非効率的で不必要な。

+0

公開されたアルゴリズムへのリンクを提供できますか?同様の質問を投稿していますが、私たちはこれを見つけるのに困っています。 –

+0

リンクをご提供の場合は、次の質問にお答えください:http://stackoverflow.com/questions/7662009/which-jar-ends-up-on-the-classpath-in-a-maven-incremental-build –

関連する問題