Glassfishに配布されたMavenによって管理されるJavaプロジェクトがあります。"未使用"ランタイム依存性の安全な除去
私の質問は、実行時の依存関係になる可能性があるmaven-managed依存関係を安全に削除するにはどうすればよいですか?
私は、従来のプロジェクトで使用されていない依存関係を識別するためにmaven dependency pluginを使用しました:出力は次のようになります
mvn dependency:analyze -DignoreNonCompile=true
:
[INFO] --- maven-dependency-plugin:2.8:analyze (default-cli) @ MyProject ---
[WARNING] Used undeclared dependencies found:
[WARNING] commons-collections:commons-collections:jar:3.2:compile
[WARNING] commons-beanutils:commons-beanutils:jar:1.7.0:compile
[WARNING] org.apache.cxf:cxf-core:jar:3.1.3:compile
[WARNING] junit:junit:jar:4.11:test
[WARNING] org.springframework:spring-test:jar:4.1.6.RELEASE:test
[WARNING] com.fasterxml.jackson.core:jackson-databind:jar:2.4.3:compile
[WARNING] ca.uhn.hapi:hapi-base:jar:2.2:compile
[WARNING] org.apache.camel:camel-core:jar:2.15.3:compile
[WARNING] Unused declared dependencies found:
[WARNING] org.apache.camel:camel-cxf:jar:2.15.3:compile
[WARNING] org.apache.cxf:cxf-rt-bindings-soap:jar:3.1.3:compile
[WARNING] org.apache.camel:camel-jms:jar:2.15.3:compile
[WARNING] net.sf.saxon:Saxon-HE:jar:9.5.1-5:compile
[WARNING] org.apache.camel:camel-mina2:jar:2.15.3:compile
[WARNING] com.google.code.gson:gson:jar:2.7:compile
[WARNING] org.springframework:spring-jms:jar:4.2.1.RELEASE:compile
[WARNING] org.springframework:spring-web:jar:4.2.1.RELEASE:compile
[WARNING] org.springframework:spring-orm:jar:4.2.1.RELEASE:compile
[WARNING] org.apache.cxf:cxf-rt-frontend-jaxws:jar:3.1.3:compile
[WARNING] org.apache.camel:camel-spring-ws:jar:2.15.3:compile
[WARNING] org.apache.camel:camel-saxon:jar:2.15.3:compile
[WARNING] org.apache.camel:camel-servlet:jar:2.15.3:compile
[WARNING] org.apache.camel:camel-hl7:jar:2.15.3:compile
[WARNING] org.apache.camel:camel-spring:jar:2.15.3:compile
[WARNING] org.apache.camel:camel-ftp:jar:2.15.3:compile
[WARNING] org.apache.camel:camel-velocity:jar:2.15.3:compile
[WARNING] ch.qos.logback:logback-classic:jar:1.1.2:compile
[WARNING] org.apache.cxf:cxf-rt-transports-http:jar:3.1.3:compile
[WARNING] org.apache.camel:camel-ejb:jar:2.15.3:compile
[WARNING] org.slf4j:slf4j-api:jar:1.7.7:compile
私は、これらの「未使用」の依存関係を削除したいですしかし、私はアプリケーションが実行時に失敗することを心配しています。
ignoreNonCompileオプションを有効にすると、「未使用の依存解析の実行時/提供済み/テスト/システムのスコープを無視する」ことが約束されていますが、依存関係の範囲を設定することは、自動的に)、私はこれらの "未使用"の依存関係は実際にランタイム依存性ではないことが確信できるとは思いません。
Camel DSLのために、maven依存プラグインが "未使用"のCamel依存関係を誤って識別する可能性が特に高いため、この質問apache-camel
を具体的にタグ付けした理由があります。私は限りMavenのが懸念しているとして、これは単なる文字列なので、それはプロジェクトが本当の依存性を持っていることを気づいていないことを考える
from("ftp://[email protected]?password=secret&ftpClient.dataTimeout=30000").to("bean:foo");
:たとえば、camel-ftp
コンポーネントは次のようになりDSLで使用されていますcamel-ftpコンポーネントにあります。
私の質問は、どのように安全に実行時の依存関係になる可能性のある依存関係を削除できますか?
ProGuardのような、バイトコードレベルの依存性を分析し、未使用のクラスをスローするシステムを使用してください。 –
アイデアのおかげで@SeanPatrickFloyd:いいです! ProGuardは、特に大きなプロジェクトのために、学習と構成に多少の時間を要します。私は仕事を恐れないが、残念ながら私はまだ私のpom.xmlファイルをクリーンアップしたいと思う:私は最初に未使用の依存関係を含めたくない。 – DavidS
私は理解しますが、その部分はずっと難しいです。おそらくProGuardを分析のためだけに使用し、その出力を使用して保持する必要のある依存関係を検出することができますか? –