Maven не может разрешать классы

У меня есть любопытная проблема с 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 и тестирование с использованием JUnit run в IntelliJ работает!

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

Эта проблема сохраняется, хотя через cmd с использованием «mvn clean install», через maven внутри IntelliJ и на CI/CD (teamcity)

ПОМ

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

Sambit 06.06.2019 18:42

нет, работает только "скомпилировать"

David Geirola 06.06.2019 18:43

Если у вас есть полная структура maven, вы сможете собрать проект, используя «mvn clean install» или «mvn clean package». Если вы опубликуете структуру проекта, мы сможем вам помочь.

Sambit 06.06.2019 19:34

Пожалуйста, поделитесь Минимальный, полный и проверяемый пример.

CrazyCoder 06.06.2019 21:50

Обновлено на простом примере

David Geirola 07.06.2019 10:22
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
5
530
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

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

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

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

Более подробная информация о proc конфигурации ЗДЕСЬ

Другие вопросы по теме