2017-09-25 38 views
0

我一直在寻找一种工具,它能够向您显示未使用的依赖关系。我很快就发现了maven命令mvn dependency:analyze。与此相关的问题是,它经常检测到“未使用”的依赖关系,如果失败,它会使构建失败。mvn依赖关系中的结果不正确:analyze

下面是从一个优化的项目的示例:

$ 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 

依赖在pom.xml中

<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 

通过从卸下Lombok的我的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的,演员我得到运行项目

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

两个Log4j和龙目以下的错误在我的项目中使用。你有一个想法如何解决这个问题或从哪里来?

预先感谢您

+1

第一件事就是使用[maven-dependency-plugin]的最新版本(https://maven.apache.org/plugins/maven-dependency-plugin/)。此外,问题是如何使用这些依赖关系? – khmarbaise

+1

我相信分析器在字节码级别运行,因此它可能不会检测到像lombok已被编译的未使用的内容。 –

+0

您是否尝试修改范围? log4j-extras可以是运行时依赖项吗?不熟悉lombok以及如何解决这个问题 –

回答

0

我也已经运行到哪里龙目岛项目已打上了dependency:analyze与未用声明的依赖性问题。 Lombok项目大部分时间都是在编译时进行的,因此编译后大部分注释都会被删除。这就是Maven的依赖分析器无法识别它的原因。为什么它也无法检测到使用SPI加载的依赖关系。

我们通过明确告诉Dependency analyzer插件忽略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,因此当您的运行时不提供Lombok时,不会出现任何问题,这与Maven依赖声明期望的相反。

相关问题