9

私はEclipseでJavaプロジェクトに取り組んでおり、Mavenを使用して依存関係を構築および管理しています。このプロジェクトは 5 つの Eclipse プロジェクトにまたがっており、そのうちの 1 つが親 POM です。私は、別のチームが実装したはるかに複雑なサーバーに基づいたサーバーの実装に取り​​組んでいます。そのため、私は彼らの既存のコードと POM ファイルに基づいて作業を行いましたが、これらの Eclipse プロジェクト全体の POM には多くの不要な依存関係があります。

比較的言えば、私は Maven の初心者ですが、次のコマンドには慣れています。

mvn dependency:analyze

Eclipse Maven プラグインを使用してこのコマンドを実行すると、「未使用の宣言された依存関係」の長いリストが表示されますが、そのうちのいくつかを削除しようとすると、プログラムが壊れてしまうことがあります。

この問題に対処するための一般的に受け入れられているベストプラクティスの方法はありますか? それとも、これらの (おそらく) 未使用の依存関係を 1 つずつ削除して、それぞれが削除された後に何も壊れていないことを確認することを辞任していますか?

4

2 に答える 2

1

java-verbose:classオプションをオンにしてコードを実行してみてください。これにより、各クラスがどこからロードされるか (どの jar ファイル) を示す出力が生成されます。(注: Sun JRE では、これは標準出力に書き込まれます。IBM JRE では、標準エラーに書き込まれると思います。) 出力の例を次に示します。

[Loaded junit.framework.AssertionFailedError from file:/D:/Documents%20and%20Settings/mike/.m2/repository/junit/junit/3.8.2/junit-3.8.2.jar]
[Loaded junit.framework.ComparisonFailure from file:/D:/Documents%20and%20Settings/mike/.m2/repository/junit/junit/3.8.2/junit-3.8.2.jar]
[Loaded org.jmock.core.SelfDescribing from file:/D:/Documents%20and%20Settings/mike/.m2/repository/jmock/jmock/1.2.0/jmock-1.2.0.jar]
[Loaded org.apache.log4j.spi.Configurator from file:/D:/Documents%20and%20Settings/mike/.m2/repository/log4j/log4j/1.2.9/log4j-1.2.9.jar]
[Loaded org.apache.log4j.xml.DOMConfigurator from file:/D:/Documents%20and%20Settings/mike/.m2/repository/log4j/log4j/1.2.9/log4j-1.2.9.jar]

(必要なクラスがロードされるように) プログラムのロジックのほとんどを実行している限り、verbose:class の出力に記載されていない jar は、maven の依存関係として削除できると安全に想定できます。

verbose:class の出力を検索して置換し、たとえば csv に変換してから、それをスプレッドシート プログラムに取り込み、jar ファイルで並べ替え/グループ化することもできます。

まだかなりの手作業が必要ですが、少なくとも開始する場所が得られます!

于 2013-07-08T20:03:05.913 に答える