java - Maven 无法解析类

标签 java maven intellij-idea deployment build

我在测试和部署过程中遇到了一个关于 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/

相关文章:

java - JNI 库在垃圾回收时释放内存?

java - 在java中连接两个JTextArea(更新)

java - 用java编写一个简单的基准测试工具

java - ArrayList.add(int index, E element) 线程不安全吗?

java - 使用 FTP 部署 Maven 多模块项目的站点时出错

java - Spring MVC 上传、生成和下载文件的安全方法

maven - 每个 svn trunk 是否有一个(多模块)maven 项目

intellij-idea - 如何/如何在 Intellij IDEA 中显示控制台窗口?

android - 在 IntelliJ 中编译时找不到模块包

java - 如何使用特殊字符和空格设置 intellij 服务器 jvm 参数