示例場景:我有2個項目,「common-project」和「application-project」。應用程序項目取決於common-project提供的API。這兩個項目也有第三方的罐子(例如番石榴)。
我將創建3個Maven項目:一個parent
聚集模塊,common-project
模塊和application-project
模塊根據common-project
並宣佈番石榴爲parent
模塊(這樣子項目將繼承它)的依賴。事情是這樣的:
$ tree Q3337426
Q3337426
├── application-project
│ ├── pom.xml
│ └── src
│ ├── main
│ └── ...
│ └── test
│ └── ...
├── common-project
│ ├── pom.xml
│ └── src
│ ├── main
│ └── ...
│ └── test
│ └── ...
└── pom.xml
當母體的pom.xml如下:
<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/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.stackoverflow.Q3337426</groupId>
<artifactId>Q3337426</artifactId>
<packaging>pom</packaging>
<version>1.0-SNAPSHOT</version>
<name>Q3337426 - Root</name>
<url>http://maven.apache.org</url>
<dependencies>
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>r05</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
</dependencies>
<modules>
<module>common-project</module>
<module>application-project</module>
</modules>
</project>
爲共同項目的pom.xml中:
<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">
<modelVersion>4.0.0</modelVersion>
<parent>
<artifactId>Q3337426</artifactId>
<groupId>com.stackoverflow.Q3337426</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<artifactId>common-project</artifactId>
<name>Q3337426 - Common Project</name>
<dependencies/>
</project>
pom.xml中的應用項目:
<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">
<modelVersion>4.0.0</modelVersion>
<parent>
<artifactId>Q3337426</artifactId>
<groupId>com.stackoverflow.Q3337426</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<artifactId>application-project</artifactId>
<name>Q3337426 - Application Project</name>
<dependencies>
<dependency>
<groupId>${project.groupId}</groupId>
<artifactId>common-project</artifactId>
<version>${project.version}</version>
</dependency>
</dependencies>
</project>
這是Maven組織這樣一個項目的方式,並且允許從根項目觸發反應堆構建來構建一切。
(...)這兩個項目都在積極開發中,所以我寧願不必首先構建一個common-project jar,然後「安裝」到我的本地存儲庫,然後才能使用新的應用程序項目中的功能。
m2eclipse插件可以從工作區項目解決依賴(這實際上是默認行爲)。因此,如果您同時導入application-project
和common-project
,則前者將被配置爲取決於common-project
(取決於廣告瓶)的源。使用此設置時,對common-project
所做的更改將立即可見。
這應該解決您在IDE內部的問題。在IDE之外,在頂部項目上運行反應堆構建。
謝謝 - 我想我應該讓common-project成爲一個共享的工件,並看看它是如何工作的。看起來我仍然可以使用eclipse設置項目依賴關係,這樣重構仍然可以應用於多個項目。 – MavenN00b 2010-07-26 20:00:04
我完全反對使用'system'範圍的依賴關係,這是一個非常糟糕的做法,不應該鼓勵,人們只是濫用它。 – 2010-07-26 21:33:51