2013-06-30 3 views
1

Я не использовал Maven подробноПроект Maven Multi Module

В настоящее время существует 5 различных проектов maven, каждый из которых имеет другой pom.xml. На данный момент существует зависимость зависимости между ними, каждая из которых указывает на другую зависимость в <> при необходимости.

enter image description here

В настоящее время, что мы не подобные

  1. Когда мы выпускаем ребенка Projecta, то необходимо вручную изменить все проекты, имеющие Projecta как зависимость для использования новой версии. У Saw Maven есть плагин версии, не знаю, как это поможет.
  2. В качестве решения я хочу иметь более чистую организацию между порами и избежать этого.

Что я думал, что это (может быть неправильным)

enter image description here

Где жир стрелка представляет Родитель ребенка отношения и тонкая стрелка представляет подмодуль. Но это, кажется, не работает, см код и ошибки ниже

проект Ребенка 2 П

<groupId>ChildProject2</groupId> 
    <artifactId>ChildProject2</artifactId> 
    <version>0.0.1-SNAPSHOT</version> 
    <parent> 
    <groupId>Parent</groupId> 
    <artifactId>Parent</artifactId> 
    <version>${parent.version}</version> 
    <relativePath>../Parent/pom.xml</relativePath> 
    </parent> 
    <dependencies> ... </dependencies> 

ChildProject2 - Ошибка ошибки сборки проекта: Non-разрешимы родитель POM: Невозможность передачи Родительский: родительский: pom: $ {parent.version} из http://repo1.maven.org/maven2 был , кешированный в локальном репозитории, разрешение не будет повторно загружено до тех пор, пока интервал обновления центрального элемента не истечет, или обновления не будут принудительно изменены. Исходная ошибка: Не удалось передать артефакт Родитель: Родитель: pom: $ {parent.version} из/в центральный (http://repo1.maven.org/maven2): Недопустимый символ в пути по индексу 45: http://repo1.maven.org/maven2/Parent/Parent/ $ {parent.version}/Parent - $ {parent .version} .pom и точки 'parent.relativePath' в неверном местного POM

родитель пОМ

<groupId>Parent</groupId> 
    <artifactId>Parent</artifactId> 
    <version>0.0.1-SNAPSHOT</version> 
    <packaging>pom</packaging> 

    <properties> 
    <parent.version>0.0.1-SNAPSHOT</parent.version> 
    </properties> 

    <modules> 
    <module>../ChildProject2</module> 
    <module>../ChildProject1</module> 
    </modules> 

    <dependencies> ... </dependencies> 

GrandParent2 пОМ

<groupId>GrandParent2</groupId> 
    <artifactId>GrandParent2</artifactId> 
    <version>0.0.1-SNAPSHOT</version> 
    <packaging>pom</packaging> 

    <properties> 
    <grandparent2.version>0.0.1-SNAPSHOT</grandparent2.version> 
    </properties> 

    <modules> 
    <module>../Parent</module> 
    </modules> 

    <dependencies>... </dependencies> 

ParentMain.Java

public class ParentMain { 

    public static void main(String[] args) { 
     DocumentFactory df = new DocumentFactory(); 
     ChildProject1Main cp1 = new ChildProject1Main(); 
     ChildProject2Main cp2 = new ChildProject2Main(); 
    } 

} 

ParentMain - Ошибки

    • ChildProject1Main не может быть разрешен к типу
    • ChildProject1Main не может быть разрешен к типу

настоящее время я использую Maven Версия 2.2.1 (открыт для обновления, если это может быть решена с помощью обновленной версии Maven) Один из комментариев ниже говорит может решить это с помощью "CI инструментов там таких как Jenkins и TeamCity ».любой указатель (примеры), как решить это, используя Maven (или или Hudson) ??

Что я делаю не так, как получить лучший дизайн для таких зависимостей проекта

+1

Почему вы используете устаревшую версию maven? Версия 3.x устраняет несколько неприятных проблем с управлением зависимостями. В любом случае ваш родительский pom не ссылается на вашего дедушку и родителя, и в любом случае вы не можете иметь более одного родителя. Я не уверен, чего вы пытаетесь достичь, но, вероятно, вам лучше использовать зависимости и удалить циклы. –

+0

Да, поскольку мы не можем иметь двух родителей, следовательно, не смог добавить, был застрял в этом месте, поэтому остановился и искал руководство ... добавил больше описания к моему вопросу, просто чтобы понять, думаю ли я в правильном направлении или нет. – Lav

+0

Если я могу решить это, используя 3.x, конечно, я могу попробовать решение на своей локальной машине ... показывая, что может попросить команду обновиться до 3.x ... любые указатели ... увидели это http://stackoverflow.com/questions/10582054/maven-project-version-inheritance-do-i-have-to-define-the-parent-version – Lav

ответ

1

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

  1. Плотно связанный код. Это проявляется в дублировании кода или большом запахе класса/метода.

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

  2. Иерархия нелогичного кода. Это (в конечном итоге) проявляется в виде круговых зависимостей или зависимостей, которые внезапно исчезают, когда появляются <exclude> блоков.

    Вы хотите, чтобы линии, которые зависят от того, что должно быть , являются явным, так что ваша иерархия кода хорошо выложена.

Я собираюсь взять ваши стрелы в одной мощности означает, что проект зависит от других, так что имеет смысл, что UI и C зависят от бизнеса-логики функционирования. Также имеет смысл, что Business Logic может зависеть от дочерних модулей для выполнения некоторой другой функции, не связанной с ядром.

не Имеет смысл то, что эти модели детей также зависят от бизнес-логики. Модули для детей должны быть достаточно уникальными, чтобы им не нужно было зависеть от бизнес-логики; если они это сделают, тогда, возможно, они должны там жить.

Что касается управления версиями - там есть инструменты CI, такие как Jenkins и TeamCity, которые могут помочь вам в решении этой проблемы. Цель должна заключаться в том, чтобы создать это так, чтобы оно происходило независимо от вмешательства человека/ошибки.

+0

эта цифра предлагает то, что я думаю как решение ... Возможно, я ошибаюсь. Фактический рабочий код просто имеет тег , где это необходимо. SO ARE Вы предлагаете, чтобы родительский модуль и ребенок имели только родительское отношение. а не отношения к модулю? ** также любые данные о том, почему я получаю ошибку в childproject2 pom и родительской java, помогут ** – Lav

+0

добавлено больше вопросов, дайте мне знать, если я думаю в правильном направлении – Lav

0

How do I tell Maven to use the latest version of a dependency?

Посмотрите на вышеприведенной нити. Мне нравится ответ Адама Гента, чтобы использовать плагин версий для обновления версий в ваших потах в jenkins. Я согласен с ним в том, что maven и непрерывное развертывание являются особенно плохими.

Итак, используйте это и простой родительский pom для любой общей конфигурации (плагины, зависимости и т. Д.), Но не делайте им проекты и версию нескольких модулей и освобождайте родительский пом в качестве самостоятельной вещи.

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