示例场景:我有 2 个项目,“common-project”和“application-project”。 application-project 依赖于 common-project 提供的 API。两个项目还使用了第 3 方 jars(例如 guava)。
我将创建 3 个 maven 项目:一个 parent 聚合模块、一个 common-project 模块和一个依赖于 common-project 的 application-project 模块,并将 guava 声明为 parent 模块中的依赖项(这样子项目将继承它)。像这样的:
$ 树 Q3337426
Q3337426
├── 应用项目
│ ├── pom.xml
│ └── src
│ ├── 主要
│ └── ...
│ └── 测试
│ └── ...
├── 共同项目
│ ├── pom.xml
│ └── src
│ ├── 主要
│ └── ...
│ └── 测试
│ └── ...
└── 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>
common-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 方式,将允许从根项目触发反应器构建以构建所有内容。
(...) 这两个项目都在积极开发中,所以我不希望先构建一个通用项目的 jar,然后将其“安装”到我的本地存储库,然后我才能在应用程序中使用新功能-项目。
m2eclipse 插件可以解决来自 Workspace 项目的依赖关系(这实际上是默认行为)。因此,如果您同时导入application-project 和common-project,则前者将被配置为依赖于common-project 的来源(而不是依赖于jar)。使用此设置时,对 common-project 所做的更改将立即可见。
这应该可以解决您在 IDE 中的顾虑。在 IDE 之外,在顶级项目上运行反应器构建。