Как включить модуль maven вне контекста проекта?

Я хотел бы иметь модуль в какой-то глобальной директории проекта, чтобы я мог включить этот модуль во все другие проекты, использующие этот общий код.

Но как я могу тогда сказать родителю Maven pom включить и скомпилировать этот глобальный общий модуль? Следующее не работает:

svn/MyGlobalProject/project-commons/pom.xml           //should be shared among different projects
svn/MyProject/web-parent/trunk/pom.xml                //the parent pom used to build the application
svn/MyProject/web-parent/trunk/project-domain/pom.xml //submodule 1
svn/MyProject/web-parent/trunk/project-web/pom.xml    //submodule 2

родительский pom.xml:

<project>
        <groupId>de.project</groupId>
    <artifactId>project-parent</artifactId>
    <packaging>pom</packaging>

    <modules>
        <module>project-domain</module>
        <module>project-web</module>
        <module>../project-commons</module> <!-- Error -->
    </modules>
</project>

mvn package результаты в:

Child module trunk\project-commons of trunk\pom.xml does not exist

2 ответа

Решение

Если вы бежите mvn install в этом глобальном проекте он будет установлен в вашем локальном хранилище. Ваши другие проекты могут затем ссылаться на это как на зависимость:

<dependency>
  <groupId>whatever</groupId>
  <artifactId>project-commons</artifactId>
  <version>1.0</version>
</dependency>

Недостатком этого упрощенного подхода является то, что ваши другие проекты не будут компилироваться, пока вы не оформили project-commons и беги mvn install,

Более продвинутый подход заключается в развертывании репозитория, доступного по сети (например, Artifactory или Nexus), в котором можно развертывать глобальные артефакты. Artifactory имеет бесплатную версию для сообщества. Затем вы можете перечислить этот репозиторий в своем файле настроек, и Maven будет разрешать артефакты, загруженные в него.

Использование относительного пути для включения некоторых подмодулей не является хорошей практикой... у вас будет много проблем.

Вы не можете просто поставить общий проект как зависимость от родительского модуля...

Таким образом, у вас будет тот "общий проект" во всех подмодулях, который объявляет родительский проект как родительский...

Почему вы хотите компилировать ваш "общий" проект каждый раз, когда вы компилируете родительский pom?

Отредактировано:

ВАШ СВН:

svn/MyGlobalProject/project-commons/pom.xml           //should be shared among different projects
svn/MyProject/web-parent/trunk/pom.xml                //the parent pom used to build the    application
svn/MyProject/web-parent/trunk/project-domain/pom.xml //submodule 1
svn/MyProject/web-parent/trunk/project-web/pom.xml    //submodule 2

PARENT POM.XML:

<project>
    <groupId>de.project</groupId>
    <artifactId>project-parent</artifactId>
    <packaging>pom</packaging>

    <dependencies>
       <dependency>
      <groupId>de.project</groupId>
      <artifactId>project-commons</artifactId>
      <version>${common.project.version}</version>
       <dependency>
    <dependencies>

<modules>
    <module>project-domain</module>
    <module>project-web</module>
</modules>

Точно так же... таким образом, проектный домен и проектный веб наследуют эту зависимость, и вы сможете использовать ее везде, где захотите, в подмодулях...

Чем использование управления зависимостями может быть хорошим улучшением

Другие вопросы по тегам