【问题标题】:Maven cannot resolve classesMaven 无法解析类
【发布时间】:2019-10-22 05:17:40
【问题描述】:

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

经过一些尝试,我注意到当 packaging 设置为 jar 时会出现此问题,其中&lt;packaging&gt;pom&lt;/packaging&gt; 一切正常。

虽然通过使用“mvn clean install”的 cmd、通过 IntelliJ 中的 maven 和 CI/CD(teamcity) 上的问题仍然存在

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>

谁能解释一下为什么会这样? 谢谢:)

【问题讨论】:

  • 在您的本地系统中,您可以使用 mvn clean install 命令构建吗?
  • 不,只有“编译”有效
  • 只要你有完整的maven结构,你应该可以使用“mvn clean install”或“mvn clean package”构建项目。如果您发布项目结构,我们可能会为您提供帮助。
  • 用简单的例子更新

标签: java maven intellij-idea deployment build


【解决方案1】:

我发现了问题!

使用&lt;packaging&gt;pom&lt;/packaging&gt; 会跳过测试,这就是它起作用的原因,但这不是解决方案!

问题是我正在使用&lt;proc&gt;only&lt;/proc&gt;。此属性在具有“only”值时表示仅执行注释过程,不进行编译。这解释了为什么在安装阶段找不到Employee 类。

关于proc配置HERE的更多细节

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-11-13
    • 2012-01-02
    • 1970-01-01
    • 2014-03-17
    • 1970-01-01
    • 1970-01-01
    • 2014-04-22
    • 1970-01-01
    相关资源
    最近更新 更多