2011-02-07 5 views
0

Я новичок в Maven, и, прочитав документы на сайте maven и в онлайн-книге Maven из Sonatype, я все еще не понимаю, как лучше всего организовать вещи.Организация кода Maven и Eclipse

У меня есть два приложения, A и B, которые используют код mylib. Различные разработчики работают над приложениями A и приложением B, они выпускаются независимо. Прежде чем мы начали с maven, в Eclipse у меня было бы рабочее пространство с приложениями A и B и mylib. Путь к классам для приложения A содержит mylib. Если я внес изменения в mylib, нажав пробег в Eclipse, мои последние изменения были изменены.

В Maven я могу создать родительский pom.xml, который ссылается на приложение A и mylib. Но это делает mylib подкаталогом приложения A. Как я могу сохранить один экземпляр mylib и не связывать создание приложений A и B?

Мы используем SVN для нашего SCM

Благодаря

ответ

2

У вас есть несколько вариантов, однако, потенциально самый простой подход был бы выделить MyLib в свой собственный проект Maven с его собственным жизненным циклом. Преимущество этого подхода заключается в том, что вы можете поддерживать несколько версий mylib, а ваши приложения A и B могут ссылаться на разные версии mylib по мере необходимости. Если mylib и appA открыты в Eclipse (и mylib ссылается на версию mylib, которую вы открыли), вы можете создать приложение так же, как и до использования Maven.

Этот подход не устанавливает каких-либо зависимостей между каталогов структур приложений, так что вы могли бы пойти с чем-то подобным следующему:

/MyApps/MYLIB
/MyApps/APPA
/MyApps/AppB

Недостатком этого подхода является то, что maven не будет автоматически создавать как appA, так и mylib (или appB и mylib), поскольку они рассматриваются как отдельные приложения. Однако это может быть не очень проблемой, если ваши приложения используют предварительно определенные и встроенные версии mylib (которые были загружены в локальный репозиторий maven с помощью «mvn install»).

Вот пример из РОМ для этих проектов:

MyLib:

<project> 
    <modelVersion>4.0.0</modelVersion> 

    <groupId>com.test</groupId> 
    <artifactId>myLib</artifactId> 
    <versioning>0.0.1</versioning> 
    <packaging>jar</packaging> 

    <name>mylib</name> 

    ... 
</project>

APPA:

<project> 
    <modelVersion>4.0.0</modelVersion> 
    <groupId>com.test</groupId> 
    <artifactId>appA</artifactId> 
    <packaging>jar</packaging> 

    <name>appA</name> 
    ... 
    <dependencies> 
    <groupId>com.text</groupId> 
    <artifactId>mylib</artifactId</artifactId> 
    <version>0.0.1</version> 
    </dependencies> 
    ... 
</project>

AppB:

<project> 
    <modelVersion>4.0.0</modelVersion> 
    <groupId>com.test</groupId> 
    <artifactId>appB</artifactId> 
    <packaging>jar</packaging> 

    <name>appB</name> 
    ... 
    <dependencies> 
    <groupId>com.text</groupId> 
    <artifactId>mylib</artifactId</artifactId> 
    <version>0.0.1</version> 
    </dependencies> 
    ... 
</project>

Если вы все еще хотите удобство родителя POM (один МВН пакет комментарий), то вы можете создать мастер-п в MyApps папки/аналогичной следующий:

<project> 
    <groupId>com.test</groupId> 
    <version>0.0.1</version> 
    <artifactId>myapps</artifactId> 
    <packaging>pom</packaging> 
    <name>myapps</name> 
    <modules> 
    <module>shared</modules> 
    <module>appA</modules> 
    <module>appB</modules> 
    </modules> 
</project>

Этого POM будет автоматически создавать MYAPP Аппу и AppB. При желании вы также можете создать POM appA и appB (pom-appA.xml). Это не самый чистый подход с точки зрения Maven, но он будет функционировать. Единственная проблема, с которой вы столкнулись, заключается в том, что версия mylib не является версией, на которой зависит приложение AppA или AppB. В этом случае ваш код appA или appB будет компилироваться в отношении версии в вашем репозитории maven (если эта версия существует).

Существует много других вариантов, которые вы можете использовать, и я видел много дискуссий о блогах и вики, что является лучшим для различных сценариев. Однако обычно это сводится к тому, что лучше всего подходит для вас и вашей организации. Пока это работает, и вы не собираетесь создавать настраиваемое, не переносное решение maven, то вы, вероятно, все в порядке.

Надеюсь, это даст вам некоторые мысли, которые вы можете использовать.

+0

Спасибо, это помогает. Я вручную отредактировал файл Eclipse .classpath, чтобы включить mylib (как это было до maven), и все работает как ожидается в Eclipse. –

Смежные вопросы