Проект Java 6 Enterprise (WAR) в Maven3 (Модули) - PullRequest
0 голосов
/ 07 сентября 2011

У меня есть проект Java 6 Enterprise (WAR) в Maven3, созданный на основе

с этой структурой:

  • EnterpriseProject (Super POM)
    • ep-модель (создает JAR)
    • ep-persist (производит JAR)
    • ep-service(производит JAR)
    • ep-ui (производит JAR)
    • ep-webapp (складывает все вместе и производит WAR)

с зависимостями (->):

ep-webapp -> ep-ui -> ep-model
                   -> ep-service -> ep-model
                                 -> ep-persist -> ep-model 

Когда я запускаю «пакет» цели Enterprise Project, создается война в EnterpriseProject \ ep-webapp \ target \, и эта война содержит все необходимые библиотеки: ep-model,ep-persist, ep-service, ep-ui.

Q1) Правильно ли это решение?

Q2) Как добавить дополнительные модули (как установить зависимости)?

  • ep-common (создает JAR)
  • ep-ws (webservices; создает JAR)

Должен ли я добавлять только ep-общую зависимость в ep-weapp pom (только для добавления ep-common lib к войне) или везде, гдеЯ использую ep-common?

ep-webapp -> ep-ui -> ep-model
                   -> ep-service -> ep-model
                                 -> ep-persist -> ep-model 
          -> ep-common
          -> ep-ws

Большое спасибо за советы

Мое настоящее решение: EnterpriseProject Super pom:

<modelVersion>4.0.0</modelVersion>
<groupId>com.ep</groupId>
<artifactId>enterprise-project</artifactId>
<packaging>pom</packaging>
<version>1.0-SNAPSHOT</version>
<name>Enterprise Project</name>
<modules>
    <module>../ep-model</module>
    <module>../ep-persist</module>
    <module>../ep-service</module>
    <module>../ep-ui</module>
    <module>../ep-webapp</module>
</modules>

ep-webapp pom:

<modelVersion>4.0.0</modelVersion>
<parent>
    <groupId>com.ep</groupId>
    <artifactId>enterprise-project</artifactId>
    <version>1.0-SNAPSHOT</version>
    <relativePath>../ep/pom.xml</relativePath>
</parent>

<artifactId>ep-webapp</artifactId>
<packaging>war</packaging>
<name>webapp</name>

<dependencies>
    <dependency>
        <groupId>${project.groupId}</groupId>
        <artifactId>ep-ui</artifactId>
        <version>${project.version}</version>
    </dependency>
</dependencies>

ep-ui pom:

<modelVersion>4.0.0</modelVersion>
<parent>
    <groupId>com.ep</groupId>
    <artifactId>enterprise-project</artifactId>
    <version>1.0-SNAPSHOT</version>
    <relativePath>../ep/pom.xml</relativePath>
</parent>

<artifactId>ep-ui</artifactId>
<packaging>jar</packaging>
<name>ui</name>

<dependencies>
    <dependency>
        <groupId>${project.groupId}</groupId>
        <artifactId>ep-model</artifactId>
        <version>${project.version}</version>
    </dependency>
    <dependency>
        <groupId>${project.groupId}</groupId>
        <artifactId>ep-service</artifactId>
        <version>${project.version}</version>
    </dependency>
</dependencies>

ep-модель pom:

<modelVersion>4.0.0</modelVersion>
<parent>
    <groupId>com.ep</groupId>
    <artifactId>enterprise-project</artifactId>
    <version>1.0-SNAPSHOT</version>
    <relativePath>../ep/pom.xml</relativePath>
</parent>

<artifactId>ep-model</artifactId>
<packaging>jar</packaging>
<name>model</name>

ep-service pom:

<modelVersion>4.0.0</modelVersion>
<parent>
    <groupId>com.ep</groupId>
    <artifactId>enterprise-project</artifactId>
    <version>1.0-SNAPSHOT</version>
    <relativePath>../ep/pom.xml</relativePath>
</parent>

<artifactId>ep-service</artifactId>
<packaging>jar</packaging>
<name>service</name>

<dependencies>
    <dependency>
        <groupId>${project.groupId}</groupId>
        <artifactId>ep-model</artifactId>
        <version>${project.version}</version>
    </dependency>
    <dependency>
        <groupId>${project.groupId}</groupId>
        <artifactId>ep-persist</artifactId>
        <version>${project.version}</version>
    </dependency>
</dependencies>

ep-персон pom:

<modelVersion>4.0.0</modelVersion>
<parent>
    <groupId>com.ep</groupId>
    <artifactId>enterprise-project</artifactId>
    <version>1.0-SNAPSHOT</version>
    <relativePath>../ep/pom.xml</relativePath>
</parent>

<artifactId>ep-persist</artifactId>
<packaging>jar</packaging>
<name>persist</name>

<dependencies>
    <dependency>
        <groupId>${project.groupId}</groupId>
        <artifactId>ep-model</artifactId>
        <version>${project.version}</version>
    </dependency>
</dependencies>

Ответы [ 3 ]

1 голос
/ 08 сентября 2011

Q1) Правильно ли это решение?

Мне кажется, хорошо структурированный набор POM.

Q2) Как добавить дополнительные модули (как установить зависимости)? [ep-common, ep-ws]

Что касается ep-commons, я предполагаю, что это общие для всех модулей (общие типы, определения исключений и тому подобное) & mdash; если это так, вам нужно ссылаться на него везде, где вы его используете, иначе Maven не сможет скомпилировать его, поскольку он создает путь к классам на основе зависимостей. Я понимаю ваше беспокойство (вам приходится многократно повторять зависимость), но поскольку вы используете переменные ${project.groupId} и ${project.version}, вы не рискуете ссылаться на разные версии одного и того же модуля в разных зависимых проектах.

Если вы являетесь пуристом Maven, и я рискну заявить, что вы можете быть таким, вы можете добавить ep-commons в раздел <dependencyManagement> корневого POM, но это сэкономит вам только одну строку в каждом POM (для версии).

Одно замечание: если вы собираетесь использовать плагин релиза в будущем, ссылки "$ {}" должны быть заменены жестко закодированными идентификатором группы и строками версии, но плагин позаботится об этом сам.

Что касается ep-ws, я не совсем уверен, что там (классы JAX-WS, сгенерированные из WSDL?). Если только это, сделайте то же самое для ep-commons.

0 голосов
/ 08 сентября 2011

Итак, я переделал свой проект, и я надеюсь, что это нормально:

Enterprise Project

EnterpriseProject super pom:

<modelVersion>4.0.0</modelVersion>
<groupId>com.ep</groupId>
<artifactId>enterprise-project</artifactId>
<packaging>pom</packaging>
<version>1.0-SNAPSHOT</version>
<name>Enterprise Project</name>

<modules>
    <module>common</module>
    <module>model</module>
    <module>persist</module>
    <module>service</module>
    <module>ui</module>
    <module>webapp</module>
    <module>ws</module>
</modules>

<build>
    <defaultGoal>package</defaultGoal>
    <pluginManagement>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <configuration>
                    <source>1.7</source>
                    <target>1.7</target>
                </configuration>
            </plugin>
        </plugins>
    </pluginManagement>
</build>

<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>${project.groupId}</groupId>
            <artifactId>webapp</artifactId>
            <version>${project.version}</version>
        </dependency>
        <dependency>
            <groupId>${project.groupId}</groupId>
            <artifactId>common</artifactId>
            <version>${project.version}</version>
        </dependency>
        <dependency>
            <groupId>${project.groupId}</groupId>
            <artifactId>model</artifactId>
            <version>${project.version}</version>
        </dependency>
        <dependency>
            <groupId>${project.groupId}</groupId>
            <artifactId>persist</artifactId>
            <version>${project.version}</version>
        </dependency>
        <dependency>
            <groupId>${project.groupId}</groupId>
            <artifactId>service</artifactId>
            <version>${project.version}</version>
        </dependency>
        <dependency>
            <groupId>${project.groupId}</groupId>
            <artifactId>ui</artifactId>
            <version>${project.version}</version>
        </dependency>
        <dependency>
            <groupId>${project.groupId}</groupId>
            <artifactId>ws</artifactId>
            <version>${project.version}</version>
        </dependency>
    </dependencies>
</dependencyManagement>

webapp pom:

<modelVersion>4.0.0</modelVersion>
<parent>
    <groupId>com.ep</groupId>
    <artifactId>enterprise-project</artifactId>
    <version>1.0-SNAPSHOT</version>
</parent>

<artifactId>webapp</artifactId>
<packaging>war</packaging>
<name>webapp</name>

<dependencies>
    <dependency>
        <groupId>${project.groupId}</groupId>
        <artifactId>ui</artifactId>
    </dependency>
    <dependency>
        <groupId>${project.groupId}</groupId>
        <artifactId>ws</artifactId>
    </dependency>

общий пом:

<modelVersion>4.0.0</modelVersion>
<parent>
    <groupId>com.ep</groupId>
    <artifactId>enterprise-project</artifactId>
    <version>1.0-SNAPSHOT</version>
</parent>

<artifactId>common</artifactId>
<packaging>jar</packaging>
<name>common</name>

модель пом:

<modelVersion>4.0.0</modelVersion>
<parent>
    <groupId>com.ep</groupId>
    <artifactId>enterprise-project</artifactId>
    <version>1.0-SNAPSHOT</version>
</parent>

<artifactId>model</artifactId>
<packaging>jar</packaging>
<name>model</name>

<dependencies>
    <dependency>
        <groupId>${project.groupId}</groupId>
        <artifactId>common</artifactId>
    </dependency>
</dependencies>    

настойчивый пом:

<modelVersion>4.0.0</modelVersion>
<parent>
    <groupId>com.ep</groupId>
    <artifactId>enterprise-project</artifactId>
    <version>1.0-SNAPSHOT</version>
</parent>

<artifactId>persist</artifactId>
<packaging>jar</packaging>
<name>persist</name>

<dependencies>
    <dependency>
        <groupId>${project.groupId}</groupId>
        <artifactId>common</artifactId>
    </dependency>
    <dependency>
        <groupId>${project.groupId}</groupId>
        <artifactId>model</artifactId>
    </dependency>
</dependencies>

услугапом:

<modelVersion>4.0.0</modelVersion>
<parent>
    <groupId>com.ep</groupId>
    <artifactId>enterprise-project</artifactId>
    <version>1.0-SNAPSHOT</version>
</parent>

<artifactId>service</artifactId>
<packaging>jar</packaging>
<name>service</name>

<dependencies>
    <dependency>
        <groupId>${project.groupId}</groupId>
        <artifactId>common</artifactId>
    </dependency>
    <dependency>
        <groupId>${project.groupId}</groupId>
        <artifactId>model</artifactId>
    </dependency>
    <dependency>
        <groupId>${project.groupId}</groupId>
        <artifactId>persist</artifactId>
    </dependency>
</dependencies>

пользовательский пом:

<modelVersion>4.0.0</modelVersion>
<parent>
    <groupId>com.ep</groupId>
    <artifactId>enterprise-project</artifactId>
    <version>1.0-SNAPSHOT</version>
</parent>

<artifactId>ui</artifactId>
<packaging>jar</packaging>
<name>ui</name>

<dependencies>
    <dependency>
        <groupId>${project.groupId}</groupId>
        <artifactId>common</artifactId>
    </dependency>
    <dependency>
        <groupId>${project.groupId}</groupId>
        <artifactId>model</artifactId>
    </dependency>
    <dependency>
        <groupId>${project.groupId}</groupId>
        <artifactId>service</artifactId>
    </dependency>
</dependencies>

ws пом:

<modelVersion>4.0.0</modelVersion>
<parent>
    <groupId>com.ep</groupId>
    <artifactId>enterprise-project</artifactId>
    <version>1.0-SNAPSHOT</version>
</parent>

<artifactId>ws</artifactId>
<packaging>jar</packaging>
<name>ws</name>

<dependencies>
    <dependency>
        <groupId>${project.groupId}</groupId>
        <artifactId>common</artifactId>
    </dependency>
    <dependency>
        <groupId>${project.groupId}</groupId>
        <artifactId>model</artifactId>
    </dependency>
    <dependency>
        <groupId>${project.groupId}</groupId>
        <artifactId>service</artifactId>
    </dependency>
</dependencies>   
0 голосов
/ 08 сентября 2011

Спасибо МаДа за ваш четкий ответ.Поэтому, если я правильно понимаю, я могу (если я пурист :-)) добавить все зависимости также в корневой POM в dependencyManagement и удалить версию из I потомков, где используется данная зависимость.

У меня последний вопрос оер-WS.Вероятно, я буду использовать SpringWS & JAXB (или Castor) (потому что я предпочитаю нисходящий подход и ручную работу без генерации классов инструментом, и я не знаю, возможно ли это с помощью JAX-WS).Q3 ep-ws зависит от ep-модели и ep-service (транзитивно от ep-persist), но, как правило, не от ep-webapp, но мне нужно добавить эту зависимость в ep-webapp только для добавления библиотеки ep-ws в войну.Я прав?

Об управлении зависимостями этот блог

...