Maven не может разрешить классы - PullRequest
0 голосов
/ 06 июня 2019

У меня возникла любопытная проблема с maven во время тестирования и развертывания.

Структура проекта

SRC / главная / Java / COM /../ модели / Employee.java

SRC / тест / Java / COM /../ модели / EmployeeTest.java

Employee

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;
    }
}

EmployeeTest

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));
    }
}

Проблема

Когда я запускаю «test», «verify» или «install», я получаю следующую ошибку:

cannot find symbol: class Employee

ТОЛЬКО В ФУНКЦИИ!

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

Но IntelliJ может разрешать ссылки, действительно, у меня нет ошибок, предоставленных IntelliJ, кроме того, сборка через maven и тестирование с использованием JUnit в IntelliJ работает!

После некоторых попыток я заметил, что эта проблема возникает, когда упаковка установлена ​​на банка , с <packaging>pom</packaging> все отлично работает.

Эта проблема сохраняется, хотя через cmd, используя "mvn clean install", через maven внутри IntelliJ и на 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>

Может кто-нибудь объяснить мне, почему это происходит? Спасибо:)

1 Ответ

0 голосов
/ 07 июня 2019

Я обнаружил проблему!

При использовании <packaging>pom</packaging> тесты пропускаются, поэтому он работает, но это не решение!

Проблема в том, что я использую <proc>only</proc>,Это свойство при значении «only» означает, что будут выполняться только процессы аннотации, без компиляции.Это объясняет, почему на этапе установки он не может найти Employee класс.

Дополнительные сведения о proc конфигурации ЗДЕСЬ

...