如何正確地實現Java模塊與inter-module 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] location: package com.example.common
我懷疑這是因為測試不是模塊的一部分。 即使Maven做一些“魔法”測試的範圍內執行模塊,它不會在我依賴的模塊測試工作(由於某種原因)。 我怎麽解決這個問題?
項目的結構是這樣的:
├───my-common-module
│ ├───pom.xml
│ └───src
│ ├───main
│ │ └───java
│ │ ├───com
│ │ │ └───example
│ │ │ ├───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)。 介紹了問題的模塊。
如何正確地實現Java模塊與inter-module Maven構建測試依賴關系