Группировка maven зависимостей по проектам - PullRequest
1 голос
/ 22 мая 2009

У меня есть многомодульный проект, в котором есть различные компоненты, которые следуют довольно стандартной схеме. Например:

      root (pom)
          ...
          module-NN (pom)
             module-NN-launcher (jar)
             module-NN-runtime (jar)
          ...

(там, где много проектов с модулем NN)

Каждый проект * -launcher использует собственный API для запуска инфраструктуры, предоставляющей общий API. Проекты * -runtime затем загружаются в этот фреймворк, чтобы «делать вещи».

В настоящее время у меня есть зависимости для модуля запуска, определенные в каждом * -launcher / pom.xml. Аналогично, у меня есть ссылки на общие API в * -runtime / pom.xml. Я мог бы обновить структуру проекта, чтобы она выглядела примерно так:

    root (pom)
        launcher (pom)
            ...
            module-NN-launcher (jar)
            ...
        runtime (pom)
            ...
            module-NN-runtime (jar)
            ...
        applications (pom)
            ...
            module-NN (pom)
            ...

И поместите соответствующие зависимости в файлы launcher / runtime pom.xml, но это делает компоновку проектов гораздо менее интуитивно понятной.

Кто-нибудь сталкивался с подобной проблемой раньше? Какой совет вы можете дать при создании осмысленного макета без дублирования деталей в похожих проектах?

1 Ответ

0 голосов
/ 22 мая 2009

Я сделал что-то примерно на 90% похожее.

Подумайте о создании проекта под названием "runtime-common". В этот файл pom.xml добавьте все зависимости времени выполнения, общие для времени выполнения.

В pom.xml для модуля NN-runtime добавьте это

  <parent>
      <groupId>FOO</groupId>
      <artifactId>runtime-common</artifactId>
      <version>1.0.0</version>
  </parent>

Все, что вы добавляете в runtime-common, будет добавлено в дочерние проекты для runtime-common. Это не влияет на способность корневого проекта собрать все модули.

В итоге вы получите что-то вроде этого:

ROOT (POM)
  Launcher-COMMON (POM)
    ...
  Launcher-1 (Jar)
    ...
  Runtime-COMMON (POM)
  Runtime-1  (Jar)
    ...    
  Runtime-2  (Jar)
    ...

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

ROOT (POM)
  COMMON (POM)
    Runtime-COMMON (POM)
        ...    
    Launcher-COMMON (POM)
        ...    
  Launcher-1 (Jar)
    ...    
  Runtime-1  (Jar)
    ...    
  Runtime-2  (Jar)
    ...
...