2

Я пытаюсь преобразовать проект с несколькими подмодулями в Maven, но я думаю, что немного запутался в , как, чтобы сделать это правильно.Божественные двунаправленные зависимости с Maven или я просто смущен?

Это веб-приложение с упаковкой war. Так вот наша структура проекта:

  • core (с весны, спящий режим и т.д.)
  • module1
  • module2
  • module3

Каждый module зависит от core, потому что core предоставляет базу данных доступ и некоторые базовые функции. В словах Maven, я бы поставил

<dependency> 
    <groupId>a.b.c</groupId> 
    <artifactId>core</artifactId> 
</dependency> 

внутри каждого module «ы pom.xml.

Next: module3 также зависит от module1. Так что я бы поставил

<dependency> 
    <groupId>a.b.c</groupId> 
    <artifactId>module1</artifactId> 
</dependency> 

внутри module3 «s pom.xml.


До сих пор все выглядит довольно прямо и нормально, я думаю (?!). Теперь запутанный материал:

  • core является WebApp. Поэтому в конце я скомпилировал проект core.
  • те modules обеспечит некоторую дополнительную функциональность для веб-приложение
    • Это означает: core каким-то образом зависит от каждого module
  • Будущий релиз не может содержать module2, но вместо module2b, который фактически наследует классы module2, но может добавить/перезаписать некоторую функциональность

На данный момент у нас есть свойства (и дополнительные xml) f ile, который содержит modules в проекте core. Содержимое этого файла сообщит Spring, чтобы отсканировать еще несколько пакетов для контроллеров и фасоли.

Кроме того, есть муравей задача, которая работает с файловой системой путей:

<path id="libs.projects"> 
    <dirset dir="${basedir}/../."> 
     <include name="libprefix*"/> 
     <exclude name="moduleprefix*"/> 
    </dirset> 
</path> 

Он сканирует папки, начиная с libprefix и moduleprefix и компилирует их. Затем он берет сгенерированные файлы jar из целевых каталогов и некоторых других файлов (html, jsp, js, css и т. Д.) И копирует их в каталоги проектов core.


на вопросы довольно ясно, я думаю:

  • Что оптимальное расположение проекта (особенно в отношении тех будущих релизов)
  • двунаправленного проект зависимостей правильно?

Возможно, есть другой способ использования родительского модуля Maven с упаковкой pom? Я никогда раньше не использовал это и не знаю, что это за возможности. Но я надеюсь, вы, ребята, знаете, как это решить;)

Спасибо!

ответ

1

В Maven, если вы хотите сделать свое будущее легким, у вас будет каждый проект Maven создать одну вещь. Одна банка. Одна война. Один из них.

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

Вы не делаете это один-проект/один-артефакт вещь, я думаю, основываясь на том, что вы сказали:

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

Некоторые возможные решения.

  • Задача Ant должна быть ее собственным проектом, который генерирует собственный файл jar, когда основной проект зависит от этой банки.
  • Существует еще один военный проект, который собирает банки, созданные в различных модулях, и ядро, которое создает веб-приложение.
  • Возможно, вам нужны несколько военных проектов, если ваша дискуссия о модуле 2b означает, что есть другая версия веб-приложения, которая использует модуль 2b вместо модуля 2.
  • Возможно, обсуждение модуля 2b разрешено с версиями модулей, если вы переходите к использованию модуля 2 при переходе к использованию модуля 2b.

Его необходимо переосмыслить как артефакт верхнего уровня (возможно, войну), который зависит от некоторых артефактов более низкого уровня (возможно, банок модуля и ящика ядра). Затем эти артефакты нижнего уровня зависят от других артефактов низкого уровня. Все может зависеть и от сторонних банках.

+0

Звучит хорошо. Поэтому, если я правильно понял: ** один проект 'war' с весной (и веб-материалом), который зависит от' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ', который имеет спящую.Тогда каждый «модуль» будет зависеть от проекта «database». И проект 'war' будет зависеть от всех необходимых« модулей »? ... Тогда, если нам нужна вторая версия приложения с другой конфигурацией, мы создадим второй проект 'war', который зависит от всех необходимых модулей. Правильно? –

+0

Но тогда осталось еще одно: каждый 'module' имеет свои' Entities' и 'DAOs'. Это означает, что они должны быть включены в 'persistence.xml'. Но я не хочу включать их в проект «database». Проект базы данных ** должен ** искать в других модулях для этих классов. Это возможно? –

+0

Помогает ли это: http://static.springsource.org/spring/docs/3.0.x/spring-framework-reference/html/orm.html#orm-jpa-multiple-pu –