Лучшие практики для настройки нескольких проектов с помощью m2eclipse - PullRequest
6 голосов
/ 26 июля 2010

Пример сценария: у меня есть 2 проекта, "common-project" и "application-project".Приложение-проект зависит от API, предоставленного common-project.Существуют также сторонние файлы jar (например, guava), используемые обоими проектами.

Я пытаюсь перейти на использование maven и m2eclipse, но неясно, какой подход лучше.В настоящее время моя установка без maven имеет сторонние jar-файлы, добавленные в виде библиотек в common-project и помеченные как «экспортированные».Таким образом, они наследуются приложением-проектом, и мне не нужно явно добавлять их в виде библиотек в проекте приложения.Оба проекта находятся в активной разработке, поэтому я предпочел бы не создавать сначала банку с общим проектом, а затем «установить» ее в свой локальный репозиторий, прежде чем я смогу использовать новые функции в приложении-проекте.

Каков рекомендуемый подход для этого типа макета проекта?Я вижу, что следующая тема примерно касается темы: Проект в Eclipse, который создает JAR-файл, используемый другим проектом в Eclipse

Спасибо

Ответы [ 3 ]

4 голосов
/ 27 июля 2010

Пример сценария: у меня есть 2 проекта, "common-project" и "application-project".Приложение-проект зависит от API, предоставленного common-project.Существуют также сторонние файлы jar (например, guava), используемые в обоих проектах.

Я бы создал 3 проекта maven: модуль агрегирования parent, модуль common-project и модуль application-project в зависимостина common-project и объявите guava как зависимость в модуле parent (чтобы дочерний проект унаследовал его).Примерно так:

$ tree Q3337426
Q3337426
├── application-project
│   ├── pom.xml
│   └── src
│       ├── main
│           └── ...
│       └── test
│           └── ...
├── common-project
│   ├── pom.xml
│   └── src
│       ├── main
│           └── ...
│       └── test
│           └── ...
└── pom.xml

Где родительский pom.xml выглядит так:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.stackoverflow.Q3337426</groupId>
  <artifactId>Q3337426</artifactId>
  <packaging>pom</packaging>
  <version>1.0-SNAPSHOT</version>
  <name>Q3337426 - Root</name>
  <url>http://maven.apache.org</url>
  <dependencies>
    <dependency>
      <groupId>com.google.guava</groupId>
      <artifactId>guava</artifactId>
      <version>r05</version>
    </dependency>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
      <scope>test</scope>
    </dependency>
  </dependencies>
  <modules>
    <module>common-project</module>
    <module>application-project</module>
  </modules>
</project>

Pom.xml для общего проекта:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <parent>
    <artifactId>Q3337426</artifactId>
    <groupId>com.stackoverflow.Q3337426</groupId>
    <version>1.0-SNAPSHOT</version>
  </parent>
  <artifactId>common-project</artifactId>
  <name>Q3337426 - Common Project</name>
  <dependencies/>
</project>

Pom.xml для application-project:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <parent>
    <artifactId>Q3337426</artifactId>
    <groupId>com.stackoverflow.Q3337426</groupId>
    <version>1.0-SNAPSHOT</version>
  </parent>
  <artifactId>application-project</artifactId>
  <name>Q3337426 - Application Project</name>
  <dependencies>
    <dependency>
      <groupId>${project.groupId}</groupId>
      <artifactId>common-project</artifactId>
      <version>${project.version}</version>
    </dependency>
  </dependencies>
</project>

Это способ Maven организовать такой проект, который позволит запускать сборку реактора из корневого проекта для сборки всего.

(...) Оба проекта находятся в стадии активной разработки, поэтому я предпочел бы не создавать сначала банку с общим проектом, а затем «установить» ее в свой локальный репозиторий, прежде чем я смогу использовать новые функции.в приложении-проекте.

Плагин m2eclipse может Разрешить зависимости от проектов Workspace (это фактически поведение по умолчанию).Поэтому, если вы импортируете и application-project, и common-project, первый будет сконфигурирован, чтобы зависеть от источников из common-project (вместо зависимости от банки).Изменения, сделанные в common-project, будут сразу же видны при использовании этой настройки.

Это должно решить вашу проблему внутри IDE.За пределами IDE запустите сборку реактора на верхнем проекте.

0 голосов
/ 26 июля 2010

Предполагая, что на вашем компьютере уже установлена ​​программа maven, загрузите плагин m2eclipse, установите его и перезапустите eclipse.

Помните, что целью сборки maven является создание и создание артефакта, который можно распространять и использовать повторно. Это нормально, если вы не хотите создавать mvn install перед тем, как получить несколько стабильную версию своего "общего проекта" API. Хотя нет ничего плохого в том, чтобы делать это во время разработки.

Для вашего случая вы можете сделать одно из следующих действий:

  1. Если common-project API является абсолютно необходимым и будет чаще, чем не только использоваться в пределах application-project, то создайте свой проект как многомодульный проект и объявите common-project как модуль вашего application project. Вот пример того, как это сделать.
  2. Если в противном случае common-project будет чаще, чем общим артефактом, то создайте каждый проект независимо, объявив зависимости обоих в своих файлах pom.xml. Затмение должно быть в состоянии выяснить зависимость между ними.
  3. Вы могли бы сначала разработать частичную реализацию common-project, упаковать ее, а затем объявить как зависимость в application-project, указав <scope>system<scope>, где в файловой системе она находится, это скажет maven, что зависимость всегда присутствует и не будет искать его в любом хранилище; хотя выполнение mvn install будет более элегантным, чем это, вы пытаетесь избежать этого.

Привет.

0 голосов
/ 26 июля 2010

Выразите зависимости, которые есть у каждого проекта в элементе <dependencies> POM.

Плагин m2eclipse автоматически выберет их из файла pom.xml и добавит их в виде ссылок на библиотеку.путь компоновки в Eclipse.

Если application-project зависит от common-project, то он также унаследует свои зависимости - нет необходимости перечислять общие зависимости между ними во второй раз в pom.xml application-project.

...