2017-09-25 22 views
0

私は未使用の依存関係を表示できるツールを探しています。私はすぐにmavenコマンドmvn dependency:analyzeを見つけた。この問題は、「未使用」の依存関係が検出され、欠落した場合にビルドに失敗することがあることがよくあります。ロンボクの使用パッケージがあるのpom.xmlmvn依存関係の結果が正しくありません:

$ mvn dependency:analyze 

[INFO] Building LogfileTool 0.1 
[INFO] ------------------------------------------------------------------------ 
[INFO] 
[INFO] >>> maven-dependency-plugin:2.8:analyze (default-cli) > test-compile @ LogfileTool >>> 
[INFO] 
[INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ LogfileTool --- 
[INFO] Using 'UTF-8' encoding to copy filtered resources. 
[INFO] Copying 1 resource 
[INFO] 
[INFO] --- maven-compiler-plugin:3.1:compile (default-compile) @ LogfileTool --- 
[INFO] Changes detected - recompiling the module! 
[INFO] Compiling 7 source files to C:\Projects\LogfileToolMa\LogfileTool\target\classes 
[INFO] 
[INFO] --- maven-resources-plugin:2.6:testResources (default-testResources) @ LogfileTool --- 
[INFO] Using 'UTF-8' encoding to copy filtered resources. 
[INFO] skip non existing resourceDirectory C:\Projects\LogfileToolMa\LogfileTool\src\test\resources 
[INFO] 
[INFO] --- maven-compiler-plugin:3.1:testCompile (default-testCompile) @ LogfileTool --- 
[INFO] Nothing to compile - all classes are up to date 
[INFO] 
[INFO] <<< maven-dependency-plugin:2.8:analyze (default-cli) < test-compile @ LogfileTool <<< 
[INFO] 
[INFO] --- maven-dependency-plugin:2.8:analyze (default-cli) @ LogfileTool --- 
[WARNING] Unused declared dependencies found: 
[WARNING] log4j:apache-log4j-extras:jar:1.2.17:compile 
[WARNING] org.projectlombok:lombok:jar:1.16.18:provided 
[INFO] ------------------------------------------------------------------------ 
[INFO] BUILD SUCCESS 

依存

<dependencies> 

<!-- Logger --> 
<dependency> 
    <groupId>log4j</groupId> 
    <artifactId>log4j</artifactId> 
    <version>1.2.17</version> 
</dependency> 
<dependency> 
    <groupId>log4j</groupId> 
    <artifactId>apache-log4j-extras</artifactId> 
    <version>1.2.17</version> 
</dependency> 


<!-- Generating Getter, Setter etc. --> 
<dependency> 
    <groupId>org.projectlombok</groupId> 
    <artifactId>lombok</artifactId> 
    <version>1.16.18</version> 
    <scope>provided</scope> 
</dependency> 

<dependency> 
    <groupId>commons-io</groupId> 
    <artifactId>commons-io</artifactId> 
    <version>2.4</version> 
    <type>jar</type> 
</dependency> 

</dependencies> 

lombok.AccessLevel 
lombok.Data 
lombok.Getter 
lombok.Setter 

からロンボクを除去することによって、ここで

は、最適化されたプロジェクトの一例です私のPOM私はプロジェクトをBuildigによって次のエラーが発生します

------------------------------------------------------------- 
COMPILATION ERROR : 
------------------------------------------------------------- 
ch/glue/logfiletool/logfiletool/config_handler/LogfileSearchConfig.java:[7,14] package lombok does not exist 
ch/glue/logfiletool/logfiletool/config_handler/LogfileSearchConfig.java:[8,14] package lombok does not exist 
ch/glue/logfiletool/logfiletool/config_handler/LogfileSearchConfig.java:[9,14] package lombok does not exist 
ch/glue/logfiletool/logfiletool/config_handler/LogfileSearchConfig.java:[10,14] package lombok does not exist 
ch/glue/logfiletool/logfiletool/config_handler/LogfileSearchConfig.java:[26,2] cannot find symbol 
    symbol: class Data 
ch/glue/logfiletool/logfiletool/config_handler/LogfileParseConfig.java:[13,14] package lombok does not exist 
ch/glue/logfiletool/logfiletool/config_handler/LogfileParseConfig.java:[14,14] package lombok does not exist 
ch/glue/logfiletool/logfiletool/config_handler/LogfileParseConfig.java:[15,14] package lombok does not exist 
ch/glue/logfiletool/logfiletool/config_handler/LogfileParseConfig.java:[16,14] package lombok does not exist 
ch/glue/logfiletool/logfiletool/config_handler/LogfileParseConfig.java:[26,2] cannot find symbol 
    symbol: class Data 
ch/glue/logfiletool/logfiletool/config_handler/LogfileSearchConfig.java:[34,4] cannot find symbol 
    symbol: class Getter 
    location: class ch.glue.logfiletool.logfiletool.config_handler.LogfileSearchConfig 
ch/glue/logfiletool/logfiletool/config_handler/LogfileSearchConfig.java:[35,4] cannot find symbol 
    symbol: class Setter 
    location: class ch.glue.logfiletool.logfiletool.config_handler.LogfileSearchConfig 
ch/glue/logfiletool/logfiletool/config_handler/LogfileParseConfig.java:[35,4] cannot find symbol 
    symbol: class Getter 
    location: class ch.glue.logfiletool.logfiletool.config_handler.LogfileParseConfig 
ch/glue/logfiletool/logfiletool/config_handler/LogfileParseConfig.java:[36,4] cannot find symbol 
    symbol: class Setter 
    location: class ch.glue.logfiletool.logfiletool.config_handler.LogfileParseConfig 
ch/glue/logfiletool/logfiletool/config_handler/LogfileSearchConfig.java:[62,7] cannot find symbol 
    symbol: method setXmlToRead(java.lang.String) 
    location: class ch.glue.logfiletool.logfiletool.config_handler.LogfileSearchConfig 
ch/glue/logfiletool/logfiletool/config_handler/LogfileSearchConfig.java:[63,7] cannot find symbol 
    symbol: method setPathToLogfiles(java.lang.String) 
    location: class ch.glue.logfiletool.logfiletool.config_handler.LogfileSearchConfig 
ch/glue/logfiletool/logfiletool/config_handler/LogfileParseConfig.java:[63,7] cannot find symbol 
    symbol: method setPathForStorage(java.lang.String) 
    location: class ch.glue.logfiletool.logfiletool.config_handler.LogfileParseConfig 
ch/glue/logfiletool/logfiletool/config_handler/LogfileParseConfig.java:[64,7] cannot find symbol 
    symbol: method setPathToLogfile(java.lang.String) 
    location: class ch.glue.logfiletool.logfiletool.config_handler.LogfileParseConfig 
ch/glue/logfiletool/logfiletool/log_handler/LogfileReader.java:[93,50] cannot find symbol 
    symbol: method getPathToLogfiles() 
    location: variable logfileSearchConfig of type ch.glue.logfiletool.logfiletool.config_handler.LogfileSearchConfig 
ch/glue/logfiletool/logfiletool/log_handler/LogfileReader.java:[95,100] cannot find symbol 
    symbol: method getXmlToRead() 
    location: variable logfileSearchConfig of type ch.glue.logfiletool.logfiletool.config_handler.LogfileSearchConfig 
ch/glue/logfiletool/logfiletool/Main.java:[61,51] cannot find symbol 
    symbol: method getPathToLogfile() 
    location: variable logfileToolConfig of type ch.glue.logfiletool.logfiletool.config_handler.LogfileParseConfig 
ch/glue/logfiletool/logfiletool/Main.java:[71,52] cannot find symbol 
    symbol: method getPathForStorage() 
    location: variable logfileToolConfig of type ch.glue.logfiletool.logfiletool.config_handler.LogfileParseConfig 
22 errors 
------------------------------------------------------------- 
------------------------------------------------------------------------ 
BUILD FAILURE 
------------------------------------------------------------------------ 
Total time: 1.747 s 
Finished at: 2017-09-27T10:04:20+02:00 
Final Memory: 14M/210M 
------------------------------------------------------------------------ 
Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.1:compile (default-compile) on project LogfileTool: Compilation failure: Compilation failure: 
ch/glue/logfiletool/logfiletool/config_handler/LogfileSearchConfig.java:[7,14] package lombok does not exist 
ch/glue/logfiletool/logfiletool/config_handler/LogfileSearchConfig.java:[8,14] package lombok does not exist 
ch/glue/logfiletool/logfiletool/config_handler/LogfileSearchConfig.java:[9,14] package lombok does not exist 
ch/glue/logfiletool/logfiletool/config_handler/LogfileSearchConfig.java:[10,14] package lombok does not exist 
ch/glue/logfiletool/logfiletool/config_handler/LogfileSearchConfig.java:[26,2] cannot find symbol 
symbol: class Data 
ch/glue/logfiletool/logfiletool/config_handler/LogfileParseConfig.java:[13,14] package lombok does not exist 
ch/glue/logfiletool/logfiletool/config_handler/LogfileParseConfig.java:[14,14] package lombok does not exist 
ch/glue/logfiletool/logfiletool/config_handler/LogfileParseConfig.java:[15,14] package lombok does not exist 
ch/glue/logfiletool/logfiletool/config_handler/LogfileParseConfig.java:[16,14] package lombok does not exist 
ch/glue/logfiletool/logfiletool/config_handler/LogfileParseConfig.java:[26,2] cannot find symbol 
symbol: class Data 
ch/glue/logfiletool/logfiletool/config_handler/LogfileSearchConfig.java:[34,4] cannot find symbol 
symbol: class Getter 
location: class ch.glue.logfiletool.logfiletool.config_handler.LogfileSearchConfig 
ch/glue/logfiletool/logfiletool/config_handler/LogfileSearchConfig.java:[35,4] cannot find symbol 
symbol: class Setter 
location: class ch.glue.logfiletool.logfiletool.config_handler.LogfileSearchConfig 
ch/glue/logfiletool/logfiletool/config_handler/LogfileParseConfig.java:[35,4] cannot find symbol 
symbol: class Getter 
location: class ch.glue.logfiletool.logfiletool.config_handler.LogfileParseConfig 
ch/glue/logfiletool/logfiletool/config_handler/LogfileParseConfig.java:[36,4] cannot find symbol 
symbol: class Setter 
location: class ch.glue.logfiletool.logfiletool.config_handler.LogfileParseConfig 
ch/glue/logfiletool/logfiletool/config_handler/LogfileSearchConfig.java:[62,7] cannot find symbol 
symbol: method setXmlToRead(java.lang.String) 
location: class ch.glue.logfiletool.logfiletool.config_handler.LogfileSearchConfig 
ch/glue/logfiletool/logfiletool/config_handler/LogfileSearchConfig.java:[63,7] cannot find symbol 
symbol: method setPathToLogfiles(java.lang.String) 
location: class ch.glue.logfiletool.logfiletool.config_handler.LogfileSearchConfig 
ch/glue/logfiletool/logfiletool/config_handler/LogfileParseConfig.java:[63,7] cannot find symbol 
symbol: method setPathForStorage(java.lang.String) 
location: class ch.glue.logfiletool.logfiletool.config_handler.LogfileParseConfig 
ch/glue/logfiletool/logfiletool/config_handler/LogfileParseConfig.java:[64,7] cannot find symbol 
symbol: method setPathToLogfile(java.lang.String) 
location: class ch.glue.logfiletool.logfiletool.config_handler.LogfileParseConfig 
ch/glue/logfiletool/logfiletool/log_handler/LogfileReader.java:[93,50] cannot find symbol 
symbol: method getPathToLogfiles() 
location: variable logfileSearchConfig of type ch.glue.logfiletool.logfiletool.config_handler.LogfileSearchConfig 
ch/glue/logfiletool/logfiletool/log_handler/LogfileReader.java:[95,100] cannot find symbol 
symbol: method getXmlToRead() 
location: variable logfileSearchConfig of type ch.glue.logfiletool.logfiletool.config_handler.LogfileSearchConfig 
ch/glue/logfiletool/logfiletool/Main.java:[61,51] cannot find symbol 
symbol: method getPathToLogfile() 
location: variable logfileToolConfig of type ch.glue.logfiletool.logfiletool.config_handler.LogfileParseConfig 
ch/glue/logfiletool/logfiletool/Main.java:[71,52] cannot find symbol 
symbol: method getPathForStorage() 
location: variable logfileToolConfig of type ch.glue.logfiletool.logfiletool.config_handler.LogfileParseConfig 
-> [Help 1] 

To see the full stack trace of the errors, re-run Maven with the -e switch. 
Re-run Maven using the -X switch to enable full debug logging. 

For more information about the errors and possible solutions, please read the following articles: 
[Help 1] http://cwiki.apache.org/confluence/display/MAVEN/MojoFailureException 

と私はプロジェクト

log4j:ERROR Could not instantiate class [org.apache.log4j.rolling.RollingFileAppender]. 
java.lang.ClassNotFoundException: org.apache.log4j.rolling.RollingFileAppender 

両方のlog4jとロンボクを実行して、エラーを次取得のlog4j-エキストラなしのは、私のプロジェクトで使用されています。これを修正する方法やこれがどこから来ているのか、あなたはアイデアを持っていますか?私もプロジェクトロンボクは未使用宣言依存性としてdependency:analyzeによってマークされている問題に実行されている

+1

最初に、[maven-dependency-plugin](https://maven.apache.org/plugins/maven-dependency-plugin/)の最新バージョンを使用することです。さらに、その依存関係がどのように使われているのかという疑問があります。 – khmarbaise

+1

私はアナライザがバイトコードレベルで動作すると思うので、すでにコンパイルされているので、ロンボクが使用されていないようなものは検出されないかもしれません。 –

+0

スコープを変更しようとしましたか? log4j-extrasをランタイム依存にすることはできますか?ロンボクに慣れていないと解決される可能性があります –

答えて

0

は事前にお願いします。プロジェクトロンボクは、その魔法のコンパイル時のほとんどを行います。そのため、コンパイル後にほとんどの注釈が削除されます。これは、Mavenの依存アナライザがそれを認識しない理由です。そしてなぜそれが SPIを使用してロードされる依存関係を検出するのにも失敗します。

依存関係アナライザーのプラグインがProject Lombokを無視するように明示的に指示することで、この問題を回避しました。これは<usedDependency>設定オプション、またはのような、よりきめ細かい<ignoreUnusedDeclaredDependency>で行うことができます:スコープに関する

<pluginManagement> 
    <plugins> 
     <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-dependency-plugin</artifactId> 
      <version>3.0.2</version> 
      <configuration> 
       <ignoredUnusedDeclaredDependencies> 
        <ignoredUnusedDeclaredDependency>org.projectlombok:lombok</ignoredUnusedDeclaredDependency> 
       </ignoredUnusedDeclaredDependencies> 
      </configuration> 
     </plugin> 
    </plugins> 
</pluginManagement> 

PS:ロンボクは、コンパイル時の依存関係ですが、実行時(または終了時にクラスパス上にある必要はありませんあなたのlibフォルダに入れてください)。 provided依存関係は、コンパイルのためにjarが存在する必要があると述べていますが、実行時には実行時環境(たとえば、実行するコンテナ)によって提供されることが期待されます。実行時にLombokは必要ないので、Maven依存宣言から期待されることとは異なり、ランタイムがLombokを提供しないときには問題はありません。