簡體   English   中英

對於具有測試范圍的junit,Maven構建失敗

[英]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中,並非所有傳遞依賴項(依賴項的依賴項)都被添加到類路徑中 - 它取決於范圍。 如果傳遞依賴項是testprovided作用域,則它們永遠不會添加到類路徑中。 這是有道理的,因為如果向依賴項添加lib,則不希望依賴於其測試庫。

請參閱Maven的依賴機制簡介#Dependecy Scope ,尤其是本節底部的表格。

因此,解決方案是將junit依賴項添加到目標模塊(而不是您的公共模塊)。 或者將它添加到父級(這有點hacky,因為不是每個模塊都可能需要這種依賴),這將有效地將它添加到所有子級。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM