Maven и Eclipse организация кода - PullRequest
0 голосов
/ 07 февраля 2011

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

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

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

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

Спасибо

1 Ответ

2 голосов
/ 07 февраля 2011

У вас есть несколько вариантов, однако, потенциально самый простой подход - это выделить 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»).

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

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 (один комментарий к пакету mvn) вы можете создать главный 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, appA и appB.При желании вы также можете создать POM для appA и appB (pom-appA.xml).Это не самый чистый подход с точки зрения Maven, но он будет функционировать.Единственная проблема, с которой вы столкнетесь, - это если версия mylib не является версией, от которой зависит appA или appB.В этом случае ваш код appA или appB будет компилироваться с версией в вашем репозитории maven (если эта версия существует).

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...