Создание многомодульных проектов Maven в Eclipse - PullRequest
3 голосов
/ 09 июля 2010

Попытка создать многомодульный проект Maven в Eclipse.

Parent 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>parent</groupId>
  <artifactId>proj1</artifactId>
  <version>${myversion}</version>
  <packaging>pom</packaging>
  <properties>
   <myversion>1.0.0</myversion>
  </properties>
  <modules>
   <module>child1</module>
   <module>child2</module>
  </modules>
</project>

Child-Module 1 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>
  <parent>
    <artifactId>proj1</artifactId>
    <groupId>parent</groupId>
    <version>${myversion}</version>
  </parent>
  <groupId>parent</groupId>
  <artifactId>child1</artifactId>
  <version>${myversion}</version>
</project>

Дочерний модуль 2 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>
  <parent>
    <artifactId>proj1</artifactId>
    <groupId>parent</groupId>
    <version>${myversion}</version>
  </parent>
  <groupId>parent</groupId>
  <artifactId>child2</artifactId>
  <version>${myversion}</version>
  <dependencies>
   <dependency>
    <groupId>parent</groupId>
    <artifactId>child1</artifactId>
    <version>${myversion}</version>
    <type>jar</type>
    <scope>compile</scope>
   </dependency>
  </dependencies>
</project>

Если я использую mvn clean install из командной строки из родительской папки, я могу найти find. Все проекты строятся успешно.

Но в затмении я получаю сообщение об ошибке для дочернего модуля 2 pom.xml

Description Resource Path Location Type
parent:child1:1.0.0:jar Missing:
----------
1) parent:proj1:pom:${myversion}
----------
1 required artifact is missing.

for artifact: 
  parent:proj1:pom:${myversion}

from the specified remote repositories:
  central (http://repo1.maven.org/maven2, releases=true, snapshots=false)
 pom.xml /child2 line 1 Maven Problem

Мне нужно добиться 2 вещей 1. иметь свойство maven, чтобы определить версию в родительском файле pom. 2. используйте это свойство для определения версии во всех дочерних модулях.

Что мне делать? Я застрял. Пожалуйста, помогите.

Я использую Eclipse Galileo с m2Eclipse

1 Ответ

1 голос
/ 09 июля 2010

Это не может работать, вы не можете получить версию родительского элемента для использования от родительского элемента (и на самом деле свойства не замещаются в родительском элементе, см. MNG-624 ) , Таким образом, вам нужно жестко закодировать версию, и ваш родительский 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/maven-v4_0_0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>parent</groupId>
  <artifactId>proj1</artifactId>
  <version>1.0.0</version>
  <packaging>pom</packaging>
  <modules>
   <module>child1</module>
   <module>child2</module>
  </modules>
</project>

А в вашем дочернем POM 1. вам нужно жестко закодировать версию в /project/parent/version 2. вам не нужно указывать <version> (вы наследуете его) 3. использовать свойство ${project.version} в зависимостях.

<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>
  <parent>
    <artifactId>proj1</artifactId>
    <groupId>parent</groupId>
    <version>1.0.0</version>
  </parent>
  <groupId>parent</groupId>
  <artifactId>child2</artifactId>
  <!--version>${myversion}</version--> <!-- Inherited -->
  <dependencies>
   <dependency>
    <groupId>parent</groupId>
    <artifactId>child1</artifactId>
    <version>${project.version}</version> <!-- use the built-in property here -->
    <!--type>jar</type--> <!-- This is a default, you can omit it -->
    <!--scope>compile</scope--> <!-- This is a default, you can omit it -->
   </dependency>
  </dependencies>
</project>

Родительские элементы без версии будут поддерживаться в Maven 3.1.

Смотри также

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...