如何正確地實現Java模組與inter-module Maven構建測試依賴關係

a1107849370發表於2018-11-26

我有一個多模組使用Maven和Java專案。 我現在想遷移到Java 9/10/11和實現模組(如 JSR 376:Java平臺模組系統 )。 隨著專案已經由Maven模組,和依賴直,為專案建立模組描述符很直接。

現在每個Maven模組有自己的模組描述符( module-info.java ),在 src/main/java 資料夾中。 沒有測試類的模組描述符。

然而,我偶然發現了我一直未能解決的問題,並沒有找到任何描述如何解決: 我怎麼能有inter-module嗎 測試 與Maven和Java模組依賴關係?

在我的例子中,我有一個“共同”Maven模組,它包含一些介面或抽象類(但沒有具體實現)。 在相同的Maven模組,我有 摘要 測試,以確保適當的行為的實現這些介面/抽象類。 然後,有一個或多個子模組,介面實現/抽象類和擴充套件的抽象測試。

然而,當試圖執行 test 階段的Maven構建子模組將失敗:

[ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.8.0:testCompile (default-testCompile) on project my-impl-module: Compilation failure: Compilation failure:[ERROR] C:\projects\com.example\my-module-test\my-impl-module\src\test\java\com\example\impl\FooImplTest.java:[4,25] error: cannot find symbol[ERROR]   symbol:   class FooAbstractTest[ERROR]   location: package com.example.common

我懷疑這是因為 測試不是模組的一部分 。 即使Maven做一些“魔法”測試的範圍內執行模組,它不會在我依賴的模組測試工作(由於某種原因)。 我怎麼解決這個問題?

專案的結構是這樣的:

├───my-common-module│   ├───pom.xml│   └───src│       ├───main│       │   └───java│       │       ├───com│       │       │   └───example│       │       │       └───common│       │       │           ├───AbstractFoo.java (abstract, implements Foo)│       │       │           └───Foo.java (interface)│       │       └───module-info.java (my.common.module: exports com.example.common)│       └───test│           └───java│               └───com│                   └───example│                       └───common│                           └───FooAbstractTest.java (abstract class, tests Foo)├───my-impl-module│   ├───pom.xml│   └───src│       ├───main│       │   └───java│       │       ├───com│       │       │   └───example│       │       │       └───impl│       │       │           └───FooImpl.java (extends AbstractFoo)│       │       └───module-info.java (my.impl.module: requires my.common.module)│       └───test│           └───java│               └───com│                   └───example│                       └───impl│                           └───FooImplTest.java (extends FooAbstractTest)└───pom.xml

的依賴關係 my-impl-module/pom.xml 如下:

<dependencies>
    <dependency>
        <groupId>com.example</groupId>
        <artifactId>my-common-module</artifactId>
        <scope>compile</scope>
    </dependency>
    <dependency>
        <groupId>com.example</groupId>
        <artifactId>my-common-module</artifactId>
        <classifier>tests</classifier>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <scope>test</scope>
    </dependency></dependencies>

注:以上是我建立的一個專案來證明這個問題。 我將試著更新完整專案的問題。 真正的專案是一個複雜多了 在這裡找到 ,但還沒有模組化的主分支。

PS:程式碼本身沒有什麼錯,一切使用正常的類路徑(即編譯並執行。 在IntelliJ)。 介紹了問題的模組。


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31559515/viewspace-2221677/,如需轉載,請註明出處,否則將追究法律責任。

相關文章