Spring 打包时报错:Cannot find 'scope' in class org.apache.maven.plugin.compiler.DependencyCoordinate

2024-08-12T15:08:00

真的是不改没毛病,一改问题一大堆。在修改了默认生成的实体,添加 @Data@@EqualsAndHashCode(callSuper = true) 等 lombok 注解,并删除原来的 xxGetterxxSettertoString 等方法,并添加 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>

scope 几种取值作用范围

已知的是 lombok 之所以添加 provided 的限定,是因为处理编译、测试阶段之外,不需要将其添加到 jar 包中(为什么?猜测是提前生成了实体所需的 getter、setter 等方法,后续不需要了)。

但那是依赖,这个所谓的 annotationProcessorPaths 注解处理路径配置,还是上次学习 mapstruct 时候添加进来的。上次出现 lombok 无效,测试将 lombok 的依赖信息添加到这个路径配置里,就可以解决的。当时可没报现在的这个错。

暂时不清楚核心原因。

当前页面是本站的「Baidu MIP」版。发表评论请点击:完整版 »