Мне сложно настроить набор связанных проектов maven с взаимозависимостями между ними.
Здесь мой упрощенный случай:
pom.xml -- parent pom
\base\
pom.xml
src\main\java\Base.java -- this is just a simple class
\derived\
pom.xml
src\main\java\Derived.java -- this is a simple class that needs Base class to compile successfully, and has a main function
Мои цели:
- уметь компилировать на моей машине все проекты:
- то есть.
mnv clean compile
успешна в \
- то есть.
- уметь компилировать на моей машине только один проект:
- то есть.
mnv clean compile
успешна в\base\и\производном\(хотя это может не работать по дизайну: Зависимости между проектами в Maven)
[edit: нашел ответ для этого: база должна быть опубликована локально до производной в скомпилированном виде: например, в \base, domvn clean compile install
вместо того, чтобы делать толькоmvn clean compile
. Как только это будет сделано, выполнениеmvn clean compile
в\производном отлично работает. Тем не менее, было бы здорово это сделать, не касаясь глобального состояния, то есть без необходимости устанавливать базу, поэтому, если кто-то знает способ достижения этого, добавьте его в качестве ответа]
- то есть.
- иметь возможность запускать производный проект на моем компьютере (mvn exec: запустить или эквивалентно) прямо из исходного дерева:
- то есть.
mvn exec:run
в\производном\необходимо скомпилировать (если необходимо) и запустить файл производной .jar
- то есть.
- вариант использования "общего компонента": нажмите базовый артефакт в общий репозиторий, где другие люди могут использовать его как зависимость от maven (т.е. зависимость времени компиляции):
- то есть.
mvn clean compile ???
переместит это в общий репозиторий, указанный в ~/.m2/config.xml
- то есть.
- пример использования "образ-каталог": нажмите производный артефакт и его параметры в локальный каталог, где он может быть запущен через "java -jar..." или он может отображаться как общий ресурс ftp/http для других людей чтобы получить его. I.e., варианты использования, такие как:
-
mvn clean compile ???
будет толкать output.jar и зависимости (например, base.jar) до ~/.m2/maven.repo/.../, полученные или эквивалентные, а затем я могу cd ~/.m2/maven.repo/.../derived и запуститеjava -jar derived.jar
, чтобы запустить его. -
mvn clean compile ???
будет выталкивать base.jar в ~/.m2/maven.repo/.../base (или output.jar в соответствующий соответствующий каталог), который уже отображается как точка загрузки через локальную сеть или ftp сервер.
-
Как я могу сделать цели выше?
Здесь соответствующий раздел из родительского pom:
...
<modelVersion>4.0.0</modelVersion>
<groupId>com.foo</groupId>
<artifactId>parentpom</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>pom</packaging>
<name>parentpom</name>
<modules>
<module>base</module>
<module>derived</module>
</modules>
...
Здесь соответствующий раздел из базы pom.xml:
...
<parent>
<groupId>com.foo</groupId>
<artifactId>parentpom</artifactId>
<version>0.0.1-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<groupId>com.foo.base</groupId>
<artifactId>base</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>base</name>
...
Здесь соответствующий раздел из производного pom.xml:
...
<parent>
<groupId>com.foo</groupId>
<artifactId>parentpom</artifactId>
<version>0.0.1-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<groupId>com.foo.derived</groupId>
<artifactId>derived</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>derived</name>
<dependencies>
<dependency>
<groupId>com.foo</groupId>
<artifactId>base</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
</dependencies>
...
Заранее благодарим вас за помощь.