2013-08-13 2 views
4

Я использую followin структуру папок:Maven мульти проект модуля ошибки

SpringMvcExample 
       \_ pom.xml (root pom) 
       \_ parent 
         \_ pom.xml (parent pom) 
       \_ model 
         \_ src 
         \_ pom.xml (child pom) 

Ниже приведены примеры файлов:

root.pom:

<groupId>com.pack</groupId> 
    <artifactId>SpringMvcExample</artifactId> 
    <version>1.0-SNAPSHOT</version> 
    <packaging>pom</packaging> 

    <name>SpringMvcExample</name> 
    <url>http://maven.apache.org</url> 

    <properties> 
     <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> 
    </properties> 

    <build> 
     <defaultGoal>package</defaultGoal> 
    </build> 
    <modules> 
     <module>parent</module> 
     <module>model</module> 
    </modules> 

родитель ПОМ:

<modelVersion>4.0.0</modelVersion> 
    <groupId>com.pack</groupId> 
    <artifactId>parent</artifactId> 
    <version>1.0-SNAPSHOT</version> 
    <packaging>pom</packaging> 
    <name>parent</name> 
    <url>http://maven.apache.org</url> 
    <properties> 
     <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> 
    </properties> 
    <dependencies> 
     <dependency> 
      <groupId>junit</groupId> 
      <artifactId>junit</artifactId> 
      <version>3.8.1</version> 
      <scope>test</scope> 
     </dependency> 
     <dependency> 
      <groupId>com.pack</groupId> 
      <artifactId>model</artifactId> 
      <version>1.0-SNAPSHOT</version> 
     </dependency> 
    </dependencies> 

модель pom:

<modelVersion>4.0.0</modelVersion> 
    <parent> 
     <groupId>com.pack</groupId> 
     <artifactId>parent</artifactId> 
     <version>1.0-SNAPSHOT</version> 
     <relativePath>../parent</relativePath> 
    </parent> 
    <groupId>com.pack</groupId> 
    <artifactId>model</artifactId> 
    <version>1.0-SNAPSHOT</version> 
    <name>model</name> 
    <url>http://maven.apache.org</url> 
    <properties> 
     <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> 
    </properties> 
    <dependencies> 
     <dependency> 
      <groupId>junit</groupId> 
      <artifactId>junit</artifactId> 
      <version>3.8.1</version> 
      <scope>test</scope> 
     </dependency> 
    </dependencies> 

Когда я пытаюсь вызвать MVN чистую установку из папки модели я получаю следующее сообщение об ошибке:

[ERROR] Failed to execute goal on project model: Could not resolve dependencies for project com.pack:model:jar:1.0-SNAPSHOT: Could not find artifact com.pack:model:jar:1.0-SNAPSOT -> [Help 1] 
org.apache.maven.lifecycle.LifecycleExecutionException: Failed to execute goal on project model: Could not resolve dependencies for project com.pack:model:jar:1.0-SNAPSHOT: Could not find artifact com.pack:model:jar:1.0-SNAPSHOT 

Что я должен сделать, чтобы разрешить его?

Обновлено: Потому что не все люди встретились с одинаковой структурой, here - это ссылка на блог, который описывает его, его преимущества и недостатки. И вот example, который я пытаюсь использовать повторно.

ответ

0

Я думаю, проблема в том, что вы определили зависимость от com.pack: model в pom.xml для com.pack: parent, который сам является родителем com.pack: model. При создании com.pack: model maven смотрит в родительский pom модели и находит зависимость от com.pack: model. Потому что вы никогда не строили проект до того, как maven не найдет банку в репозитории.

Я рекомендую удалить зависимость от com.pack: model из родительского pom.xml. Родитель не должен иметь зависимости от одного из своих дочерних проектов.

0

Во-первых, ваш родительский POM обычно должен быть тем, что вы называете своим «root.pom»; модули должны находиться в каталогах внутри родительского элемента. Наличие «родительского» и «ребенка» в качестве модулей «root» не имеет смысла, а ваш корневой POM говорит, что он является родителем «ребенка», но «дочерний» POM говорит, что «родительский» - его родитель; возможно, вы не знакомы с родительскими POMs Maven?

Отметить, что в вашем сообщении об ошибке Maven ищет версию 1.0-SNAPSOT без H. Это говорит о том, что у вас есть некоторый рывок в вашем локальном репозитории из предыдущего локального запуска установки, и я подозреваю, что запутанные зависимости заставляют Maven пытаться выполнить разрешение в другом порядке, чем то, что вы ожидаете, и он находит копию чего-то в вашем локальном репозитории, который ссылается на версию с опечаткой.

1

Почему ваш родительский pom зависит от его дочернего модуля, удалите его, а затем попробуйте.

Причина: При создании этого модуля будет первым попытаться построить родитель, который нуждается ребенком (модель-1,0-Snapshot) банка для успешной сборки (как вы предоставили зависимость от него), до сих пор вам вашего дочерний модуль не построен, поэтому его артефакт недоступен.

Для получения дополнительной информации я хотел бы предложить вам взглянуть на How build order is determined by Maven Reactor.

От Спекуляции:

  • зависимость проекта от другого модуля в сборке
  • плагин декларации, где плагин еще модули в сборке
  • плагин зависимость от другого модуля в сборке
  • объявление о расширении сборки на другом модуле в сборке
  • заказ, объявленный в элементе (если не применяется другое правило)
Смежные вопросы