私は会社の新しい構成マネージャーであり、ビルド プロセスの多くをクリーンアップするプロジェクトを開始しています。
1 つの Subversion プロジェクトに大量の jar を格納しています。これらの jar ファイルをプロジェクトにコピーする人もいます。他の人は、プロジェクトの SVN:External をこのディレクトリに置きます。他の人は、これらの瓶に複雑な方法でコピーしています。これらは、使用することになっている唯一の jar です。
私は Ivy に移行し、おそらく Maven に移行します。Maven リポジトリをセットアップし、これらの jar の GroupId、ArtifactId、および Version を特定し、Ivy および Maven 構成を介して必要なものにアクセスする方法を文書化しました。
すべてのプロジェクトのソース ファイルを調べて、すべてのインポート ステートメントを見つけ、それらのインポートをこれらの jar に含まれるすべてのクラスと比較したいと考えています。
特定のソース セットが直接呼び出すすべての jar ファイルを見つけたいと考えています。たとえば、jar に次のものが含まれているとします。
import org.apache.commons.beanutils.*
commons-beanutils.jar (バージョン 1.6) が必要であることはわかっています。commons-logging.jar が必要であることもわかっていますが、Maven と Ivy にその問題を処理させます。pom.xml
開発者がorを作成するときに、orファイルivy.xml
に含める必要があることを伝えたいだけです。common-beanutils#common-beansutil#1.6
pom.xml
ivy.xml
これが完全なリストではないことはわかっています。ランタイムに必要なjarがあることはわかっていますが、コンパイルは必要ありません。また、複数の jar を処理できるクラスがあることも知っています。また、開発者はこれを行うことができます:
import org.apache.commons.*;
これは何十もの瓶と一致し、何も教えてくれません。(Java ソース ファイルで実際に使用されているクラスを特定する方法があるかもしれません)。
おそらくこれを実行できる Python または Perl スクリプトを作成することはできましたが、数時間の作業を節約できる何かが既に存在することを望んでいました。JBoss の TattleTale については知っていますが、ドキュメントでは、jar でのみ動作し、jar 間の依存関係が示されているようです。あまり興味がありません。ソースが呼び出している jar を知り、Ivy と Maven がより深い依存関係を処理できるようにしたいだけです。
そのようなツールはありますか?
補遺
より具体的に言うと。これは古いプロジェクトです。実際には、50 ほどのプロジェクトがあります。特定のプロジェクトを実行するには 20 個の jar が必要であり、TattleTail のようなツールを使用すると、データ分析全体を表示できます。
ただし、開発者の視点から見てみましょう。問題があり、問題を解決してくれるオープンソース プロジェクトを見つけました。ドキュメントを読み、コードを書き、必要なクラスをインポートします。クラスを含むそのオープン ソース プロジェクトの jar を知っていますが、それがほとんどすべてです。
私がやりたいことは、元の開発者の考え方に戻ることです。私はこのプロジェクトでこれらのクラスを使用しましたが、これらの 5 つの jar が必要です。これらの 5 つの jar を実行するためにさらに 15 個の jar が必要になる可能性があることは、Ivy/Maven が処理するものです。プログラムが必要とする 20 個の jar がわかっています。開発者が最初にコードで参照した 5 が必要です。
これは、開発者がpom.xml
orを記述するのに役立ちますivy.xml
。pom.xml
20個すべてのjarファイルをそのファイルまたはそのファイルに入れたくありませんivy.xml
-必要な5つだけです。
これは単なる出発点です。それらはインポートされた可能性がcom.foo.bar.bar.foo
あり、そのクラスはfoo-all.jar
、foo-client.jar
、および にありbar-talk.com
ます。開発者は、プロジェクトがこれらのうちどれを必要とするかを決定する必要があります。
これは私たちのプログラミングにおける大規模なパラダイム シフトですが、jar とバージョンを追跡できず、これらすべてのプロジェクトが互いに通信できることを確認しています。Ivy/Maven を使用すると、この混乱が大幅に簡素化されます。