Как включить модуль 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>
Точно так же... таким образом, проектный домен и проектный веб наследуют эту зависимость, и вы сможете использовать ее везде, где захотите, в подмодулях...
Чем использование управления зависимостями может быть хорошим улучшением