【问题标题】:Simple POJO cannot be resolved in workspace工作区中无法解析简单 POJO
【发布时间】:2021-06-24 21:27:46
【问题描述】:

我有一个 Spring Boot SOAP 服务,它使用带有 @Service 的 cxf 调用具有 JdbcTemplate@Repository。一切都是自动接线的。我创建了一个模型 POJO 类 (PersonUdland),它代表数据库中的表,它只包含 getter 和 setter。

我的问题是我收到了The import dk.dxc.soapdemo.models.PersonUdland cannot be resolved to a type。它在存储库和服务中使用,并且在任何一个类中都无法识别。我使用 VS Code,当我保存文件或使用 maven 包装器执行 cleanpackage 时,会显示错误。如果我在服务或存储库文件(出现错误的位置)中进行更改并执行ctrl+z,错误就会消失。另一个ctrl+s,错误又回来了。我试图清理 Java 语言服务器工作区。没发生什么事。然后我认为可能是VS Code有错误,所以我尝试使用Eclipse。同样的错误,但是当我使用 Eclipse 的 maven(不是 maven 包装器)运行 clean install 时,没有显示错误。在 Eclipse 和 VS Code 中都没有。当我运行生成的空contextLoads()-test 时,我在PersonUdland 模型类上得到NoClassDefFoundErrorClassNotFoundException

当我构建应用程序并在本地运行它时,没有问题。构建和部署(使用 Ansible)Jenkins 服务器也是如此。

我不知道要查找什么,并且错误在 IDE 中显示为语法错误,因此 Spring 注释不应该做任何事情(尽管我已经尝试将 @Component 添加到模型类中)并且 @ComponentScan 应该不被使用,因为它会扫描带注释的类,并且所有文件夹都在根 java 文件夹下。

我的项目结构如下:

project
│   pom.xml    
│
└───dk.dxc.soapdemo
│   │   SoapDemoApplication.java
│   │   ServletInitializer.java
│   │
│   └───service
│   │   │   PersonUdlandServiceEndpoint.java
│   │ 
│   └───models
│       │   PersonUdland.java
│   │ 
│   └───repositories
│       │   PersonUdlandRepository.java
│   │ 
│   └───config
│       │   ApplicationConfig.java

服务:

package dk.dxc.soapdemo.service;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

// "Cannot be resolved" error
import dk.dxc.soapdemo.models.PersonUdland;
import dk.dxc.soapdemo.repositories.PersonUdlandRepository;
import dk.skat.begrebsmodel._2016._01._01.*; // <-- generated from wsdl

@Service
public class PersonUdlandServiceEndpoint implements 
PersonUdlandSkattefritagelseSendServicePortType {
    @Autowired
    private PersonUdlandRepository personUdlandRepository;

    @Override
    public PersonUdlandSendOType getPersonUdlandSend(PersonUdlandSendIType request) {
        // "Cannot be resolved" error
        PersonUdland personUdland = personUdlandRepository.getPersonUdlandByPnr(request.getPersonCPRNummer());

        return response;
    }
}

存储库:

package dk.dxc.soapdemo.repositories;

import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Repository;
// "Cannot be resolved" error
import dk.dxc.soapdemo.models.PersonUdland;

@Repository
public class PersonUdlandRepository {

    @Autowired
    private JdbcTemplate jdbcTemplate;

    // "Cannot be resolved" error on return type
    public PersonUdland getPersonUdlandByPnr(String pnrNumber) {
        Map<String, Object> resultSet = jdbcTemplate.queryForMap(sqlQuery, pnrNumber);
        // "Cannot be resolved" error
        PersonUdland personUdland = new PersonUdland();

        //set fields on personUdland and return
    }
}

型号:

package dk.dxc.soapdemo.models;

public class PersonUdland {
    // Fields that are all Strings

    // Getters and setters
}

编辑:添加数据库配置

数据库是通过application.properties配置的

spring.datasource.url=jdbc:db2://path:to/db
spring.datasource.username=user
spring.datasource.password=pass
spring.datasource.type=org.apache.tomcat.jdbc.pool.DataSource
spring.datasource.tomcat.name=DBName
spring.datasource.tomcat.initial-size=1
spring.datasource.tomcat.maxActive=50
spring.datasource.tomcat.test-on-connect=true
spring.datasource.tomcat.max-wait=20000
spring.datasource.tomcat.max-idle=15
spring.datasource.tomcat.default-auto-commit=false
spring.datasource.driver-class-name=com.ibm.db2.jcc.DB2Driver

我使用的数据库依赖:

...
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-jdbc</artifactId>
</dependency>
<dependency>
    <groupId>org.apache.tomcat</groupId>
    <artifactId>tomcat-jdbc</artifactId>
</dependency>
<dependency>
    <groupId>com.ibm.db2.jcc</groupId>
    <artifactId>db2jcc</artifactId>
    <version>db2jcc4</version>
</dependency>
<dependency>
    <groupId>com.ibm.db2</groupId>
    <artifactId>db2jcc_license_cisuz</artifactId>
    <version>3.69.24</version>
</dependency>
...

【问题讨论】:

  • 你也可以发送你的数据库配置类吗?
  • @sevvalai 我已经添加了配置
  • 你说的when I run clean install with eclipse's maven (not maven wrapper), no error shows,也可以在vscode中访问,由扩展Maven for JAVA提供。你试过了吗?
  • 我已经尝试过了,它给出了与使用包装器相同的错误。无论如何我都应该使用包装器。
  • @Kikkomann 我没有看到数据库配置类,但是您是否添加了扫描数据库配置中的模型包的行?

标签: java spring-boot maven visual-studio-code classnotfoundexception


【解决方案1】:

你应该在实体类上有@Entity和@Table注解。

【讨论】:

猜你喜欢
  • 2016-10-17
  • 1970-01-01
  • 2017-09-07
  • 2020-12-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-09-07
  • 1970-01-01
相关资源
最近更新 更多