[英]Maven build failing for junit with test scope
我有一個非常簡單的junit測試類,它使用Eclipse JUnit啟動程序成功運行。
下面是JUnit的pom依賴項。
<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">
...
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.mockito</groupId>
<artifactId>mockito-all</artifactId>
<version>1.10.19</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.hamcrest</groupId>
<artifactId>hamcrest-all</artifactId>
<version>1.3</version>
<scope>test</scope>
</dependency>
...
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.19.1</version>
</plugin>
</plugins>
</build>
</project>
但是,在運行maven構建時,我收到以下錯誤消息:
MyTest.java:[3,24] package org.junit does not exist
並且,從junit依賴項中刪除<scope>test</scope>
后,構建成功運行。
為什么它失敗了測試范圍以及如何修復它?
我使用的是Java 8和Maven 3.3.9版本。
編輯 - 添加了最小,完整和可驗證的代碼
由於我無法共享實際代碼,因此我創建了一個演示測試類,並在下面得到了相同的錯誤。
/MyProject/demo/src/test/java/com/MyTest.java:[3,24] package org.junit does not exist
/MyProject/demo/src/test/java/com/MyTest.java:[3,1] static import only from classes and interfaces
/MyProject/demo/src/test/java/com/MyTest.java:[5,17] package org.junit does not exist
MyTest類:
package com;
import static org.junit.Assert.assertEquals;
import org.junit.Test;
public class MyTest {
@Test
public void demo() throws Exception {
int expected = 10;
int actual = 10;
assertEquals(expected, actual);
}
}
此外,它是一個多模塊項目。 JUnit依賴項在公共模塊下,Test類在demo模塊下。
演示模塊中的pom.xml包含常見的模塊依賴項:
<dependencies>
<dependency>
<groupId>myproject</groupId>
<artifactId>common</artifactId>
<version>1.0</version>
</dependency>
</dependencies>
但是,在將MyTest類復制到公共模塊后,構建成功。 因此,看起來普通模塊中的junit依賴項不會導入到演示模塊。
在Maven中,並非所有傳遞依賴項(依賴項的依賴項)都被添加到類路徑中 - 它取決於范圍。 如果傳遞依賴項是test
或provided
作用域,則它們永遠不會添加到類路徑中。 這是有道理的,因為如果向依賴項添加lib,則不希望依賴於其測試庫。
請參閱Maven的依賴機制簡介#Dependecy Scope ,尤其是本節底部的表格。
因此,解決方案是將junit依賴項添加到目標模塊(而不是您的公共模塊)。 或者將它添加到父級(這有點hacky,因為不是每個模塊都可能需要這種依賴),這將有效地將它添加到所有子級。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.