blob: 4514937dfc28595bb48fcf9ae34db51cda80b74e [file] [log] [blame]
~~ Licensed to the Apache Software Foundation (ASF) under one
~~ or more contributor license agreements. See the NOTICE file
~~ distributed with this work for additional information
~~ regarding copyright ownership. The ASF licenses this file
~~ to you under the Apache License, Version 2.0 (the
~~ "License"); you may not use this file except in compliance
~~ with the License. You may obtain a copy of the License at
~~
~~ http://www.apache.org/licenses/LICENSE-2.0
~~
~~ Unless required by applicable law or agreed to in writing,
~~ software distributed under the License is distributed on an
~~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
~~ KIND, either express or implied. See the License for the
~~ specific language governing permissions and limitations
~~ under the License.
------
Exclude dependencies from dependency analysis
------
Henning Schmiedehausen
------
2015-01-01
------
Exclude dependencies from dependency analysis
A project's dependencies can be analyzed as part of the build process by binding the <<<dependency:analyze-only>>>
goal to the lifecycle. By default, the analysis will be performed during the <<<verify>>> lifecycle phase.
It is possible to have necessary dependencies on the classpath that
cause either "Declared but unused" or "Undeclared but used" warnings.
One common cause of byte code analysis being unable to
determine whether a jar is required are annotations with
source retention. Another common cause is
a class that is loaded by reflection at runtime.
The dependency plugin does not warn about a few common dependencies
where its analysis is known to be unreliable, most notably SLF4J.
If you encounter other false positives, you can configure the plugin to ignore particular
dependencies that are "declared but unused", "undeclared but used", and "non-test scoped".
See the following POM configuration for an example:
+---+
<project>
...
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<version>${project.version}</version>
<executions>
<execution>
<id>analyze</id>
<goals>
<goal>analyze-only</goal>
</goals>
<configuration>
<failOnWarning>true</failOnWarning>
<!-- ignore jsr305 for "used but undeclared", "declared but unused", and "non-test scoped" -->
<ignoredDependencies>
<ignoredDependency>com.google.code.findbugs:jsr305</ignoredDependency>
</ignoredDependencies>
<!-- ignore annotations for "used but undeclared" warnings -->
<ignoredUsedUndeclaredDependencies>
<ignoredUsedUndeclaredDependency>com.google.code.findbugs:annotations</ignoredUsedUndeclaredDependency>
</ignoredUsedUndeclaredDependencies>
<!-- ignore annotations for "unused but declared" warnings -->
<ignoredUnusedDeclaredDependencies>
<ignoredUnusedDeclaredDependency>com.google.code.findbugs:annotations</ignoredUnusedDeclaredDependency>
</ignoredUnusedDeclaredDependencies>
<!-- ignore annotations for "non-test scoped" warnings -->
<ignoredNonTestScopedDependencies>
<ignoredNonTestScopedDependency>com.google.code.findbugs:annotations</ignoredNonTestScopedDependency>
</ignoredNonTestScopedDependencies>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
...
</project>
+---+
Note that the <<<dependency:analyze-only>>> goal is used in preference to <<<dependency:analyze>>> since it doesn't
force a further compilation of the project, but uses the compiled classes produced from the earlier
<<<test-compile>>> phase in the lifecycle.
The project's dependencies will then be automatically analyzed during the <<<verify>>> lifecycle phase, which can be
executed explicitly as follows:
+---+
mvn verify
+---+