2014-11-18 3 views
0

몇 개의 다중 모듈 메이븐 프로젝트가 있습니다. 그것은 자바 EE 애플리케이션, 그래서 그들 모두는 결국 하나의 EAR 파일로 이동하여 모든 의존성 관리가 3 번째 파티 종속성을 설명 특별한 별도의 POM,이 이유는 다음과 같습니다Maven 종속성 관리 및 IDE :`import` scope

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

그것은 또한 수입 거기에 부모 POM AS JBoss는 의존성 관리 섹션의 :

<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에 대해 설명 자신의 부모, 버전없이 종속성을 설명해야합니다.

명령 줄을 사용할 때 완벽하게 작동합니다. 모든 종속성 버전이 올바르게 해석되었습니다.

하지만 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의 버전은 상위 POM 같이 보스에있다.

왜 이런 일이 발생하며이 문제를 IDE에서 오류없이 해결할 수 있습니까? 당신의 기지에서

+0

프로젝트를 IDE로 가져 오는 방법은 무엇입니까? 내 생각 엔, 당신은 당신의 하위 모듈을 부모 pom에 모듈로 제공하고 IDE에만 부모 pom으로 가져와야한다고 생각합니다. – arghtype

+0

맞습니다. IDE에서 상위 POM을 가져옵니다. 모든 하위 모듈은 IDE에서 자동으로 가져옵니다. – dds

+0

이 오류를 재현했습니다 (단순한 경우). 나는 버전없이 의존성을 완전히 제거함으로써 오류를 제거 할 수 있었다. 코드는 여전히 컴파일 될 수 있습니다. 해볼 수 있니? – arghtype

답변

0

나는 결국이 문제가이 dependencyManagement 섹션이 my-3rd-party-deps POM의 프로필 안에 있다는 사실에 기인합니다. 내가 그 질문에서 언급하지 않은 것은 나쁘다.

그래서 IDE는 선택된 프로필을 repo에서 게시 된 아티팩트 (예 : my-3rd-party-deps)로 전파하지 않습니다.

용액을 별도의 리딩 (예컨대 my-3rd-party-deps-jbossmy-3rd-party-deps-wildfly)를 생성하고 모든 부모 프로젝트 프로파일 dependencyManagement 섹션에서 해당 POM를 가져올 수 있었다.

이제는 제대로 작동합니다.

0

당신이 당신의 서브 모듈에서 다음

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

을 가져야한다 pom으로 치어 당신은

<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