Пример сценария: у меня есть 2 проекта, "common-project" и "application-project".Приложение-проект зависит от API, предоставленного common-project.Существуют также сторонние файлы jar (например, guava), используемые в обоих проектах.
Я бы создал 3 проекта maven: модуль агрегирования parent
, модуль common-project
и модуль application-project
в зависимостина common-project
и объявите guava как зависимость в модуле 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 для application-project:
<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 организовать такой проект, который позволит запускать сборку реактора из корневого проекта для сборки всего.
(...) Оба проекта находятся в стадии активной разработки, поэтому я предпочел бы не создавать сначала банку с общим проектом, а затем «установить» ее в свой локальный репозиторий, прежде чем я смогу использовать новые функции.в приложении-проекте.
Плагин m2eclipse может Разрешить зависимости от проектов Workspace (это фактически поведение по умолчанию).Поэтому, если вы импортируете и application-project
, и common-project
, первый будет сконфигурирован, чтобы зависеть от источников из common-project
(вместо зависимости от банки).Изменения, сделанные в common-project
, будут сразу же видны при использовании этой настройки.
Это должно решить вашу проблему внутри IDE.За пределами IDE запустите сборку реактора на верхнем проекте.