In a mvn project where I am utilizing maven-dependency-plugin
to detect unused dependencies, there is seemingly no dependency scope
I can specify for Google's AutoValue ( com.google.auto.value:auto-value
) to that will convince the plugin that the dependency is being used in spite of the fact that annotations from the package are being used (eg @AutoValue
) and the project won't build if auto-value
is excluded.
Now one solution is simply adding a configuration entry to my plugin:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<configuration>
<usedDependencies>
<usedDependency>com.google.auto.value:auto-value</usedDependency>
</usedDependencies>
</configuration>
</plugin>
But I would be curious to know whether it's possible to configure either the maven-dependency-plugin
or the dependency
entry for auto-value
in a way that would detect usage of the dependency per its annotations?
My suspicion is that this isn't possible because the RetentionPolicy
of the annotations I'm using from auto-value are of RetentionPolicy.SOURCE
and are discarded by the compiler. Is this correct?
Unfortunately, your suspicion is correct. The maven-dependency-plugin
documentation specifically lists this as a concern here for source level annotations: http://maven.apache.org/shared/maven-dependency-analyzer/
Warning : Analysis is not done at source but bytecode level, then some cases are not detected (constants, annotations with source-only retention, links in javadoc) which can lead to wrong result if they are the only use of a dependency.
You can force AutoValue
as used
with usedDependencies
as you have in your example or use the ignoredUnusedDeclaredDependencies
configuration instead (which is what I did recently).
I don't believe it is possible to configure the dependency section to avoid this because maven doesn't provide a scope level that is compile only. I mark AutoValue
with the provided
scope to keep it out of any shaded jars I might make.
Lastly, you could write (or find if it exists) a custom dependency analyzer that takes source level annotations into account. See the documentation here http://maven.apache.org/plugins/maven-dependency-plugin/analyze-mojo.html#analyzer . Probably not worth the effort.
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.