【发布时间】: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 时会出现此问题,其中<packaging>pom</packaging> 一切正常。
虽然通过使用“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