【发布时间】:2019-08-14 07:55:02
【问题描述】:
我有以下构建配置:
父 POM:
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.1</version>
<configuration>
<release>11</release>
<annotationProcessorPaths>
<path>
<groupId>com.google.auto.value</groupId>
<artifactId>auto-value</artifactId>
<version>1.6.5</version>
</path>
</annotationProcessorPaths>
</configuration>
</plugin>
</plugins>
</build>
其中一个子项目包含以下内容:
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<annotationProcessorPaths>
<path>
<groupId>com.google.dagger</groupId>
<artifactId>dagger-compiler</artifactId>
<version>2.24</version>
</path>
</annotationProcessorPaths>
</configuration>
</plugin>
</plugins>
</build>
当我运行此配置时,我不断收到org.apache.maven.lifecycle.LifecycleExecutionException:
org.apache.maven.lifecycle.LifecycleExecutionException: Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.8.1:compile (default-compile) on project imgn: Fatal error compiling
...
Caused by: org.apache.maven.plugin.MojoExecutionException: Fatal error compiling
...
Caused by: org.codehaus.plexus.compiler.CompilerException: java.lang.NoSuchMethodError: com.squareup.javapoet.ClassName.withoutAnnotations()Lcom/squareup/javapoet/ClassName;
...
Caused by: java.lang.RuntimeException: java.lang.NoSuchMethodError: com.squareup.javapoet.ClassName.withoutAnnotations()Lcom/squareup/javapoet/ClassName;
...
Caused by: java.lang.NoSuchMethodError: com.squareup.javapoet.ClassName.withoutAnnotations()Lcom/squareup/javapoet/ClassName;
at dagger.internal.codegen.langmodel.DaggerElements.getTypeElement(DaggerElements.java:105)
at dagger.internal.codegen.InjectBindingRegistryImpl$BindingsCollection.shouldGenerateBinding(InjectBindingRegistryImpl.java:134)
...
当我检查这些工件的依赖关系时,com.google.auto.value:auto-value:1.6.5 (after checking parents) 依赖于 com.squareup:javapoet:1.9.0,com.google.dagger:dagger-compiler:2.24 依赖于 com.squareup:javapoet:1.11.1。
当我检查signature of ClassName::withoutAnnotation in com:squareup:javapoet:1.11.1 是public ClassName withoutAnnotations()。
signature of ClassName::withoutAnnotation in com:squareup:javapoet:1.9.0 是 public TypeName withoutAnnotations()。
确实,有冲突。
如果是普通依赖,我会知道使用<exclusions> 标签,但在这种情况下,如果我添加这样的标签,我会遇到以下问题:Cannot find 'exclusions' in class org.apache.maven.plugin.compiler.DependencyCoordinate。
那么我该如何解决annotationProcessorPaths 中的这种冲突?
【问题讨论】:
标签: maven dagger-2 maven-compiler-plugin auto-value