我的任务是将 spring-data-neo4j Maven 依赖项集成到一个项目中,该项目使用带有 Xlint 和 -Werror 标志的 maven-compiler-plugin。我遇到了一些需要修复的编译问题。
构建一个依赖于 spring-data-neo4j 的 Maven 项目,并且此构建配置发出编译警告,导致构建失败。我不能随意更改这个项目的构建配置,所以我试图找到一种方法来消除编译器警告。
我通过将http://github.com/spring-guides/gs-accessing-data-neo4j项目分叉到https://github.com/spencerhrob/gs-accessing-data-neo4j重现了这个问题。
在with-xlint分支中,pom.xml 文件的“build”部分已更改为以下内容:
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.2</version>
<configuration>
<source>1.7</source>
<target>1.7</target>
<encoding>UTF-8</encoding>
<showDeprecation>true</showDeprecation>
<showWarnings>true</showWarnings>
<debug>true</debug>
<compilerArguments>
<Xlint/>
<Werror />
</compilerArguments>
</configuration>
</plugin>
</plugins>
</build>
在此分支的完整文件夹中运行mvn clean package会返回以下编译错误:
[WARNING] COMPILATION WARNING :
[INFO]-------------------------------------------------------------
[WARNING] No processor claimed any of these annotations: org.springframework.context.annotation.Bean, org.springframework.data.neo4j.config.EnableNeo4jRepositories, org.springframework.data.neo4j.annotation.NodeEntity,org.springframework.data.neo4j.annotation.GraphId,org.springframework.data.neo4j.annotation.RelatedTo,org.springframework.data.neo4j.annotation.Fetch,org.springframework.context.annotation.Configuration,org.springframework.beans.factory.annotation.Autowired
[INFO] 1 warning
[INFO]-------------------------------------------------------------
[INFO] -------------------------------------------------------------
[ERROR] COMPILATION ERROR :
[INFO]-------------------------------------------------------------
[ERROR] warnings found and -Werror specified [INFO] 1 error
通过删除 -Xlint 标志(如在without-xlint分支中)可以预见地导致不发出编译器警告。此外,删除 -Werror 标志(如在without-werror分支中)会导致发出警告,但 Maven 构建仍然成功完成。
我还尝试将 Xlint 与父 gs-accessing-data-neo4j 项目中使用的 spring-boot-maven-plugin 构建插件一起使用。我的存储库中的without-maven-compiler-plugin分支具有以下配置:
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<source>1.7</source>
<target>1.7</target>
<encoding>UTF-8</encoding>
<showDeprecation>true</showDeprecation>
<showWarnings>true</showWarnings>
<debug>true</debug>
<compilerArguments>
<Xlint/>
<Werror />
</compilerArguments>
</configuration>
</plugin>
</plugins>
</build>
即使在编译器参数中指定了 Xlint,在此分支上运行mvn clean package也不会返回编译器警告(尽管我承认我不完全确定 Xlint 正在运行)。
我知道我可以通过删除 maven-compiler-plugin 或删除 -Xlint 或 -Werror 标志来解决这个问题,但这不是一个选项,因为我无法更改我正在工作的项目的构建配置on(这不是引用的 GitHub 存储库)。
有一个已知的原因为什么使用带有 -Xlint 和 -Werror 标志的 maven-compiler-plugin 构建依赖于 spring-data-neo4j 的项目会导致“没有处理器声明任何这些注释”编译器警告?而且,有没有办法在不删除 maven-compiler-plugin 或 -Xlint 和 -Werror 标志的情况下消除编译器警告?