我正在使用maven,並且我正在開發同一個父類下的3個類,儘管它們屬於不同的實際項目。
這三個類屬於不同的pom文件和工件名稱,它們(在它們的鏈式依賴關係之外)完全獨立。
爲了簡單起見,我會打電話給他們A,B和Cmaven不包括javac所需的類路徑文件
A依賴於B.
B依賴於C.
A,在某些時候,使得一個新實例B.
...
B b = new B();
...
乙這裏擴展了C
...
public class B extends C {
...
是POM依賴關係:
答:
<dependencies>
<dependency>
<groupId>my.group</groupId>
<artifactId>B</artifactId>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>my.group</groupId>
<artifactId>B</artifactId>
<version>0.0.1</version>
</dependency>
</dependencies>
</dependencyManagement>
B:
<dependencies>
<dependency>
<groupId>my.group</groupId>
<artifactId>C</artifactId>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>my.group</groupId>
<artifactId>C</artifactId>
<version>0.0.1</version>
</dependency>
</dependencies>
</dependencyManagement>
當我在父POM文件maven install
,它正確地定義模塊順序
[INFO] Reactor Build Order:
[INFO]
[INFO] C
[INFO] B
[INFO] A
首先它編譯C和B正確地。然後,當它的時間來編譯:
/path/to/A/A.java[27,28] error: cannot access C
如果您想了解什麼是「27,28」,它是這裏的「新」,也就是上面引述上面的線。
有趣的是:
- 如果我在B首先,然後在一個
mvn install
(我知道爲什麼;)做一個mvn install
),它的工作原理,但是這不是一個解決方案由於的要求要求的工作。 - 如果我將C添加到A的要求,它也可以。但它不是一個解決方案,因爲C不是A的要求,它是B的要求。如果出於某種原因A停止使用B,那麼做任何事情的人都必須記住從要求中移除C是沒有意義的。
我忘了提:
出於某種原因,在依賴關係樹:
[INFO] --- maven-dependency-plugin:2.8:tree (default-cli) @ A ---
[INFO] my.group:A:jar:0.0.1
[INFO] +- my.group:B:jar:0.0.1:provided
C沒有出現在需求樹的要求。雖然:
[INFO] --- maven-dependency-plugin:2.8:tree (default-cli) @ B ---
[INFO] my.group:B:jar:0.0.1
[INFO] \- my.group:C:jar:0.0.1:provided
C是B的需求樹中的需求。
奇怪的事情是:爲什麼A不是C的需求樹?
在您的Java代碼中,顯示您的軟件包名稱和相應的導入。使這些摘錄看起來像適當的Java代碼。顯示這些源文件的路徑。向我們展示項目中目錄的實際結構。 (你在這裏留下了太多的猜測空間,我們並不是所有的心理學家)。 – carlspring