Maven Java EE и модуль проекта pom - PullRequest
2 голосов
/ 14 ноября 2010

Я новичок в Maven.

У меня есть веб-проект Java EE и модельный проект, веб-проект зависит от модели, потому что в модуле есть несколько стандартных классов, которые должны быть в Интернете.

веб-файл нуждается в jar-файле модели.

как мне написать 2 проекта, один из которых зависит от другого?

Дайте мне пример кодирования на обоих проектах.

Ответы [ 2 ]

5 голосов
/ 14 ноября 2010

Типичная структура проекта с несколькими модулями maven включает в себя 3 модулей: агрегирующий родительский модуль (позволяющий запустить многомодульную сборку на всех модулях), модуль модели и веб-модуль. Как то так:

.
├── mymodule
│   ├── pom.xml
│   └── src
│       ├── main
│       │   ├── java
│       │   └── resources
│       └── test
│           ├── java
│           └── resources
├── mywebapp
│   ├── pom.xml
│   └── src
│       └── main
│           ├── resources
│           └── webapp
│               ├── index.jsp
│               └── WEB-INF
│                   └── web.xml
└── 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/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.stackoverflow</groupId>
  <artifactId>Q4176120</artifactId>
  <version>1.0-SNAPSHOT</version>
  <packaging>pom</packaging>
  <name>Q4176120 - Parent POM</name>
  <url>http://maven.apache.org</url>
  <dependencies>
    ...
  </dependencies>
  <modules>
    <module>mywebapp</module>
    <module>mymodule</module>
  </modules>
</project>

mymodule/pom.xml будет обычным POM:

<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>Q4176120</artifactId>
    <groupId>com.stackoverflow</groupId>
    <version>1.0-SNAPSHOT</version>
  </parent>
  <!--groupId>com.stackoverflow</groupId--> <!-- inherited -->
  <artifactId>mymodule</artifactId>
  <packaging>jar</packaging>
  <name>Q4176120 - Module</name>
  <dependencies>
    ...
  </dependencies>
</project>

И mywebapp/pom.xml объявит зависимость от артефакта mymodule:

<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>Q4176120</artifactId>
    <groupId>com.stackoverflow</groupId>
    <version>1.0-SNAPSHOT</version>
  </parent>
  <!--groupId>com.stackoverflow</groupId--> <!-- inherited -->
  <artifactId>mywebapp</artifactId>
  <packaging>war</packaging>
  <name>Q4176120 - Maven Webapp</name>
  <dependencies>
    <dependency>
      <groupId>${project.groupId}</groupId>
      <artifactId>mymodule</artifactId>
      <version>${project.version}</version>
    </dependency>
  </dependencies>
  <build>
    <finalName>Q4176120</finalName>
  </build>
</project>

С этой структурой вы можете запустить сборку из нескольких модулей из родительского каталога, то есть запустить цель для всех модулей (и maven рассчитает правильный порядок сборки):

$ mvn install
[INFO] Scanning for projects...
[INFO] ------------------------------------------------------------------------
[INFO] Reactor Build Order:
[INFO] 
[INFO] Q4176120 Parent POM
[INFO] Q4176120 Module
[INFO] Q4176120 Maven Webapp
[INFO]                                                                         
...

Обратите внимание, что я также использовал наследование в приведенных выше примерах (mymodule и mywebapp наследуют от родителя, объявленного в элементе <parent>), так что я может группировать общие части в родительском POM и избегать повторения. Это не обязательно, вы можете использовать агрегацию без наследования, но это очень удобно, и на практике агрегация и наследование часто сочетаются.

Ресурсы

0 голосов
/ 14 ноября 2010

Вы создаете 2 maven проекта: веб-проект и jar-проект.веб-проект будет зависеть от модели проекта.Таким образом, вы добавите модельный проект в качестве зависимости в веб-проекты pom.xml

. Предлагаю прочитать основы maven здесь: http://www.sonatype.com/books/maven-book/

Модель вашего проекта 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.abc</groupId>
<artifactId>>model-module</artifactId>
<name>My Model Module</name>
<packaging>jar</packaging>
<version>1.0.0-SNAPSHOT</version>

Ваше веб-приложение 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.abc</groupId>
<artifactId>>my-web-app</artifactId>
<name>My First Web Application</name>
<packaging>war</packaging>
<version>1.0.0-SNAPSHOT</version>
<dependencies>
    <dependency>
      <groupId>com.abc</groupId>
      <artifactId>model-module</artifactId>
      <version>1.0.0-SNAPSHOT</version>
    </dependency>

...