gpt4 book ai didi

java - Maven 无法解析类

转载 作者:行者123 更新时间:2023-12-02 04:46:11 24 4
gpt4 key购买 nike

我在测试和部署过程中遇到了一个关于 Maven 的奇怪问题。

项目结构

src/main/java/com/../models/Employee.java

src/test/java/com/../models/EmployeeTest.java

员工

public class Employee {
private final String name;
private final Dollars salary;

public Employee(String name, Dollars salary) {
this.name = name;
this.salary = salary;
}

public String getName() {
return name;
}

public Dollars getSalary() {
return this.salary;
}
}

美元

public class Dollars {

private final BigDecimal value;
public Dollars(BigDecimal value) {
this.value = value;
}

public BigDecimal getValue() {
return value;
}
}

员工测试

public class EmployeeTest {

@Test
public void justASimpleTest() {
Employee employee = new Employee("David", new Dollars(BigDecimal.valueOf(100)));
Employee updatedEmployee = updateSalary(BigDecimal.valueOf(200)).apply(employee);

assertEquals(BigDecimal.valueOf(200), updatedEmployee.getSalary().getValue());
}

private Function<Employee, Employee> updateSalary(final BigDecimal value) {
return employee -> new Employee(employee.getName(), new Dollars(value));
}
}

问题

当我运行“测试”、“验证”或“安装”时,出现以下错误:

cannot find symbol: class Employee

仅在函数中!

private Function<Employee, Employee> updateSalary(final BigDecimal value) {...}
^^^^^^^^ ^^^^^^^^

但是 intelliJ 确实可以解析引用,我没有 IntelliJ 提供的错误,而且通过 maven 构建并使用在 IntelliJ 中运行的 JUnit 进行测试!

经过一番尝试,我注意到当打包设置为jar时会出现此问题,并且<packaging>pom</packaging>一切正常。

尽管通过 cmd 使用“mvn clean install”、通过 IntelliJ 内的 Maven 和 CI/CD(teamcity) 上的 Maven,此问题仍然存在

POM

<?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>

<packaging>jar</packaging>

<groupId>XXX</groupId>
<artifactId>YYY</artifactId>
<version>ZZZ</version>

<artifactId>sample</artifactId>

<properties>
<junit.version>4.11</junit.version>
<maven-compiler-plugin.version>3.8.1</maven-compiler-plugin.version>
<java.version>1.8</java.version>
</properties>

<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>${junit.version}</version>
<scope>test</scope>
</dependency>
</dependencies>

<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>${maven-compiler-plugin.version}</version>
<configuration>
<source>${java.version}</source>
<target>${java.version}</target>
<proc>only</proc>
<generatedSourcesDirectory>${project.build.directory}/generated-sources/annotations
</generatedSourcesDirectory>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-deploy-plugin</artifactId>
<version>2.7</version>
<configuration>
<skip>true</skip>
</configuration>
</plugin>
</plugins>
</build>
</project>

有人可以解释一下为什么会发生这种情况吗?谢谢:)

最佳答案

我发现问题了!

使用<packaging>pom</packaging>测试被跳过,这就是它有效的原因,但这不是解决方案!

问题是我正在使用 <proc>only</proc> 。当此属性具有“only”值时,意味着仅执行注释过程,不进行编译。这解释了为什么在安装阶段找不到 Employee类。

有关proc的更多详细信息配置HERE

关于java - Maven 无法解析类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56481775/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com