2014-11-18 7 views
0

У меня есть несколько мультимодульных проектов maven. Это приложение Java EE, так что все они идут в один файл EAR в конечном счете, и именно поэтому есть специальный отдельный POM, где все управление зависимостью описывается зависимости 3-й партии:Управление зависимостями Maven и IDE: область «import»

<groupId>mygroup</groupId> 
<artifactId>my-3rd-party-deps</artifactId> 
<version>1.0.0</version> 
<packaging>pom</packaging> 

Он также импорт JBoss AS родительском ПОМ в его зависимости секция управления:

<dependencyManagement> 
    <dependencies> 
     <dependency> 
      <groupId>org.jboss.as</groupId> 
      <artifactId>jboss-as-parent</artifactId> 
      <version>7.1.3.Final</version> 
      <type>pom</type> 
      <scope>import</scope> 
     </dependency> 

каждый проект имеет собственный родитель, где я описываю

<dependencyManagement> 
    <dependencies> 
     <dependency> 
      <groupId>mygroup</groupId> 
      <artifactId>my-3rd-party-deps</artifactId> 
      <version>1.0.0</version> 
      <type>pom</type> 
      <scope>import</scope> 
     </dependency> 
    </dependencies> 
</dependencyManagement> 

и каждый подмодуль J ust описывает их зависимости без версий.

Это прекрасно работает при использовании командной строки. Все версии зависимостей разрешены правильно.

Но в IDE (я пробовал IDEA, Eclipse и NetBeans), я получаю ошибки.

IDEA

[ERROR] 'dependencies.dependency.version' for org.jboss.spec.javax.ejb:jboss-ejb-api_3.1_spec:jar is missing. @ line 63, column 29 less... 

Затмение

For artifact {org.jboss.spec.javax.ejb:jboss-ejb-api_3.1_spec:null:jar}: The version cannot be empty. (org.apache.maven.plugins:maven-resources-plugin:2.6:resources:default-resources:process-resources) 

в то время как версия для org.jboss.spec.javax.ejb:jboss-ejb-api_3.1_spec находится в JBoss AS родительский POM.

Почему это происходит и как я могу решить эту проблему для работы в среде IDE без ошибок?

+0

Как вы импортируете свои проекты в IDE? Я думаю, вы должны предоставить свои подмодули в качестве модулей в родительском помпе и импортировать только родительский pom в IDE. – arghtype

+0

Правильно, я импортирую родительские POM в IDE. Затем все подмодули импортируются автоматически с помощью IDE. – dds

+0

Я воспроизвел эту ошибку (в более простом случае). Мне удалось избавиться от ошибки, полностью удалив зависимости без версии. Код все еще может быть скомпилирован. Не могли бы вы попробовать? – arghtype

ответ

0

Я решил, что проблема была вызвана тем, что этот раздел dependencyManagement был внутри профиля в my-3rd-party-deps POM. Мой плохой, что я не упоминал об этом в вопросе.

Поэтому IDE не распространяет выбранный профиль на опубликованные артефакты из репо (например, my-3rd-party-deps).

Решение было создавать отдельные РОМ (например my-3rd-party-deps-jboss и my-3rd-party-deps-wildfly) и импортировать соответствующий POM в разделе каждого родительского проекта профиля dependencyManagement.

Теперь он работает так, как должен.

0

В вашей базе POM вы должны иметь

<modules> <module>subModule</module> </modules>

затем в вашем субмодуля ПОМ вы должны иметь

<parent> <artifactId>something</artifactId> <groupId>something</groupId> <version>something</version> <relativePath>../pom.xml</relativePath> <--Notice the path </parent>

Вы try'ed других областей, кроме импорта?

Если вы используете другой объем, то импортируете, вы должны иметь возможность использовать только groupId и artifactId в вашем подмодуле. Поскольку вы уже определили версию и область действия базы pom. Вы можете переопределить их, если используете какой-либо другой вариант или область в своем подмодуле.

Другого дела, что вы могли бы сделать это в вашей базе П определит свойство

<properties> <project.jboss.artifact>1.5</project.jboss.artifact> </properties>

И в версии артефакта (в вашем подмодуле П), вы можете использовать переменную

<version>${project.jboss.artifact}</version>

+0

Да, у меня наверняка есть 'relativePath' для родителя. – dds

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