Spring 打包时报错:Cannot find 'scope' in class org.apache.maven.plugin.compiler.DependencyCoordinate
真的是不改没毛病,一改问题一大堆。在修改了默认生成的实体,添加 @Data
、@@EqualsAndHashCode(callSuper = true)
等 lombok 注解,并删除原来的 xxGetter
、xxSetter
和 toString
等方法,并添加 swagger 实体和属性注解。之后尝试 clean 再 package 打包,然后就报了这个错:
Cannot find 'scope' in class org.apache.maven.plugin.compiler.DependencyCoordinate
一开始我以为是 swagger 注解的问题,然后尝试 debug 运行调试,遇到并修复 Spring 添加 swagger 注解报错 DocumentationPluginsBootstrapper - [scanDocumentation,98] - Unable to scan documentation context default。
之后再次尝试打包,依然提示这个错误。
百度 AI 的回答,可能的原因:
- 单词拼写错误,如将“manifest”误写为“mainfest”或其他类似错误1。
- 配置了不正确的依赖范围(scope),如使用了不存在的 scope 值2。
第一条莫名其妙,也没找到 manifest 这个配置项。scope 可以找到,除了 spring test 就是 lombok 的依赖,以及注解路径配置:
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
...
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.1</version>
<configuration>
<source>${java.version}</source>
<target>${java.version}</target>
<encoding>${project.build.sourceEncoding}</encoding>
<annotationProcessorPaths>
<path>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>${lombok.version}</version>
<scope>provided</scope>
</path>
<path>
<groupId>org.mapstruct</groupId>
<artifactId>mapstruct-processor</artifactId>
<version>${mapstruct.version}</version>
</path>
</annotationProcessorPaths>
</configuration>
</plugin>
从 maven 库中对照着 spring test 和 lombok 的依赖 scope 都没有问题。
尝试删除掉 lombok 注解处理路径的 scope,结果就不报错了。
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.1</version>
<configuration>
<source>${java.version}</source>
<target>${java.version}</target>
<encoding>${project.build.sourceEncoding}</encoding>
<annotationProcessorPaths>
<path>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>${lombok.version}</version>
</path>
<path>
<groupId>org.mapstruct</groupId>
<artifactId>mapstruct-processor</artifactId>
<version>${mapstruct.version}</version>
</path>
</annotationProcessorPaths>
</configuration>
</plugin>
已知的是 lombok 之所以添加 provided 的限定,是因为处理编译、测试阶段之外,不需要将其添加到 jar 包中(为什么?猜测是提前生成了实体所需的 getter、setter 等方法,后续不需要了)。
但那是依赖,这个所谓的 annotationProcessorPaths
注解处理路径配置,还是上次学习 mapstruct 时候添加进来的。上次出现 lombok 无效,测试将 lombok 的依赖信息添加到这个路径配置里,就可以解决的。当时可没报现在的这个错。
暂时不清楚核心原因。