У меня есть любопытная проблема с 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>
Может кто-нибудь объяснить мне, почему это происходит? Спасибо :)
нет, работает только "скомпилировать"
Если у вас есть полная структура maven, вы сможете собрать проект, используя «mvn clean install» или «mvn clean package». Если вы опубликуете структуру проекта, мы сможем вам помочь.
Пожалуйста, поделитесь Минимальный, полный и проверяемый пример.
Обновлено на простом примере




Я нашел проблему!
Использование тестов <packaging>pom</packaging> пропускается, поэтому это работает, но это не решение!
Проблема в том, что я использую <proc>only</proc>. Когда это свойство имеет значение «только», это означает, что будут выполняться только процессы аннотации, без компиляции. Это объясняет, почему на этапе установки он не может найти класс Employee.
Более подробная информация о proc конфигурации ЗДЕСЬ
В вашей локальной системе вы можете выполнить сборку с помощью команды mvn clean install?