即使依赖项存在于类路径中,Spring boot 仍显示“无法解析”
Posted
技术标签:
【中文标题】即使依赖项存在于类路径中,Spring boot 仍显示“无法解析”【英文标题】:Spring boot shows 'can not be resolved' even if the dependency exists in classpath 【发布时间】:2019-07-22 05:00:14 【问题描述】:我有一个 Spring Boot 应用程序,它在 pom.xml 中添加了 starter-data-jpa 依赖项。我可以清楚地找到 maven 依赖部分中的 javax.persistence 包。但我无法使用@Entity
注释。手动输入 import javax.persistence
.Entity 时,eclipse 显示未解决的依赖关系。
提前致谢。
这是我的 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>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.6.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.springframework.boot</groupId>
<artifactId>currency-exchange-service</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>currency-exchange-serviceweb</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>1.8</java.version>
<spring-cloud.version>Greenwich.SR2</spring-cloud.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-config</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>runtime</scope>
<optional>true</optional>
</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-data-jpa</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>$spring-cloud.version</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
【问题讨论】:
做 Maven 清洁构建 如果这没有帮助,请发布代码和错误消息。 删除您正在为 JPA 启动器指定 <scope>test</scope>
,它专门告诉 Maven 您只希望该依赖项可用于测试类。删除范围,它应该可以工作。
【讨论】:
【参考方案2】:尝试从 pom.xml 中删除 <scope>
用于依赖 JPA 启动器,执行 mvn clean install -U
。这应该可以解决您的问题。
【讨论】:
不是全部,只是 JPA 启动器。 @chrylis 对不起,我错过了。感谢您指出。将更新我的答案。【参考方案3】:您应该首先从 spring-boot-starter-data-jpa
依赖项中删除 <scope>test</scope>
。
如果仍然无法正常工作,请在终端中使用以下命令验证您的项目是否在直接使用 Maven 时运行:
mvn spring-boot:run
如果此命令有效,请在 IDE 中重新导入项目,然后再次测试。通常,IDE 不会立即更新类路径,因此会出现故障。
【讨论】:
这个ide故障是怎么回事? 出于任何原因使缓存无效并重新启动。正确的做法是直接从命令行和 mvn 执行此操作。有时 ide 难以刷新和重新导入类路径以上是关于即使依赖项存在于类路径中,Spring boot 仍显示“无法解析”的主要内容,如果未能解决你的问题,请参考以下文章
NoClassDefFoundError 即使 Jar 存在于类路径中
如何在 Spring Boot 中选择性地升级依赖项? (示例案例:Spring Data)
如何将基于 Spring Boot 构建的依赖项使用到典型的 Spring 应用程序中?