Spring Boot 注释和导入无法在 Intellij IDE 上解析

Posted

技术标签:

【中文标题】Spring Boot 注释和导入无法在 Intellij IDE 上解析【英文标题】:Spring boot annotations and imports not resolving on Intellij IDE 【发布时间】:2020-04-14 17:49:41 【问题描述】:

这个项目运行良好。我只是在 pom.xml 中使用 Spring boot 版本,导入了一些新的 maven 项目,然后看到对于这些新项目,Springboot 注释和导入停止工作 -

Cannot resolve @SpringBootApplication

pom.xml -

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.in28minutes.database</groupId>
    <artifactId>database-demo</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>jar</packaging>

    <name>database-demo</name>
    <description>Demo project for Spring Boot</description>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.1.11.RELEASE</version>
        <!--<version>1.5.2.RELEASE</version>-->
        <relativePath/> <!-- lookup parent from repository -->
    </parent>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <java.version>1.8</java.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-jdbc</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>com.h2database</groupId>
            <artifactId>h2</artifactId>
            <scope>runtime</scope>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>

    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

    <repositories>
        <repository>
            <id>spring-snapshots</id>
            <name>Spring Snapshots</name>
            <url>https://repo.spring.io/snapshot</url>
            <snapshots>
                <enabled>true</enabled>
            </snapshots>
        </repository>
        <repository>
            <id>spring-milestones</id>
            <name>Spring Milestones</name>
            <url>https://repo.spring.io/milestone</url>
            <snapshots>
                <enabled>false</enabled>
            </snapshots>
        </repository>
    </repositories>

    <pluginRepositories>
        <pluginRepository>
            <id>spring-snapshots</id>
            <name>Spring Snapshots</name>
            <url>https://repo.spring.io/snapshot</url>
            <snapshots>
                <enabled>true</enabled>
            </snapshots>
        </pluginRepository>
        <pluginRepository>
            <id>spring-milestones</id>
            <name>Spring Milestones</name>
            <url>https://repo.spring.io/milestone</url>
            <snapshots>
                <enabled>false</enabled>
            </snapshots>
        </pluginRepository>
    </pluginRepositories>


</project>

我有另一个设置,它使用的是 spring boot 1.5.2.RELEASE。 我检查了这两个版本是否都在我的本地 .m2 存储库中。不知道是什么问题。

看来,所有导入的新项目都抛出了同样的问题。 例如。 https://github.com/callicoder/spring-boot-actuator-demo

更新

我意识到我的主要项目有一些依赖项(从远程服务器下载的 Maven 存储库)。这些在 .m2/settings.xml 中定义。

当我在命令行上运行 mvn install 时,我得到了这个错误 -

[错误] 无法在项目执行器演示上执行目标:无法解析项目 com.example:actuator-demo:jar:0.0.1-SNAPSHOT 的依赖项:无法在 org.springframework.boot:spring 收集依赖项-boot-starter-actuator:jar:2.1.11.RELEASE:无法读取 org.springframework.boot:spring-boot-starter-actuator:jar:2.1.11.RELEASE 的工件描述符:无法传输工件 org.springframework .boot:spring-boot-starter-actuator:pom:2.1.11.RELEASE from/to nexus (https://project.repository.com/repository/maven-public/):传输文件失败:https://project.repository.com/repository/maven-public/org/springframework/boot/spring-boot-starter-actuator/2.1.11.RELEASE/spring-boot-starter-actuator-2.1.11.RELEASE.pom。返回码是:502,ReasonPhrase:Bad Gateway。 -> [帮助 1]

我备份了 settings.xml 并将其删除。我运行 mvn clean fresh,这次它从 mvn 远程存储库下载了人工制品,问题得到了解决。

不确定为我的工作项目和演示项目切换 settings.xml 的正确方法是什么,因为前者需要这些设置。

【问题讨论】:

尝试清除缓存.. 或者在最坏的情况下,删除.m2 文件夹。也不要忘记检查我发现有一天设置的“在线模式”,我想知道为什么新的依赖关系没有解决几个小时。试一试:) 使用 mvn dependency:tree -Dincludes=[groupId]:[artifactId]:[type]:[version] 将您的依赖关系树打印到 fike 并查看您使用的依赖项和版本。 【参考方案1】:

从命令行测试以确保 Maven 设置正确。如果 maven 在 CLI 中不起作用,请修复它(也许您确实需要删除您的存储库并重新下载所有内容)。如果您有不是来自在线存储库的工件,删除您的存储库时要小心。

根据您的编辑,您需要为 Maven 设置不同的 settings.xml。这样做:

mvn --settings ~/.m2/settings-demo.xml clean install

这将使用备用设置文件。对于 Intellij,您可以在 maven 设置中指定您的 settings.xml 文件(选中“覆盖”并将新路径放入):

Maven 在 CLI 中工作 - Intellij 有时会变得愚蠢,尝试转到 File -> Invalidate Caches / Restart 并选择“无效并重新启动”

【讨论】:

谢谢,我找到了问题。更新有问题。请检查您是否可以提出建议 - 不确定为我的工作项目和演示项目切换 settings.xml 的正确方法是什么,因为前者需要这些设置。 查看我的编辑 - 我不确定是否有办法在每个模块的基础上使用不同的 maven 设置,我现在使用 Gradle 是因为 Maven 正是这种废话。跨度> 【参考方案2】:

我不认为这是 Spring Boot 问题,听起来更像是 Maven 问题,因为 Spring boot @SpringBootApplication 注释正在工作。从您的描述和查看您的pom.xml 来看,听起来您对 Maven 造成了一些冲突。

    尝试重新导入您的依赖项。 如果这没有帮助,请删除您的 .m2/repository 文件夹并重新导入您的依赖项。 我在您的pom.xml 中注意到您没有 Spring Boot 启动器版本,这意味着 Maven 采用最接近根目录的版本,如果其 Spring Boot 版本低于 2.0,则 @SpringBootApplication 不是支持的。另外,尝试在 pom.xml 中添加一个版本到 spring-boot-starters

【讨论】:

以上是关于Spring Boot 注释和导入无法在 Intellij IDE 上解析的主要内容,如果未能解决你的问题,请参考以下文章

导入spring-boot-starter-test依赖报错?

事务注释在 Spring Boot 2.1.3 中不起作用

即使安装了注释,Spring Boot Xml 查看也不起作用

Spring Boot 有哪些优点?

spring boot 导入xml配置文件所需注解和禁用自动配置类的注解

导入eclipse gradle spring boot项目后,Lombok无法在intellij idea 18.1版本中工作