2016-11-16 5 views
0

내가 멀티 모듈 구조 한 Maven 프로젝트를 이클립스하기 : 공유 어떻게 받는다는 모든 서브 모듈 글로벌 의존성을 선언하고 다음과 같이

  • 서버
    • 부모
    • 클라이언트

저에게는 모든 프로젝트에 대한 단위 테스트를 작성하는 것이 분명합니다. , 철

<dependency> 
    <groupId>junit</groupId> 
    <artifactId>junit</artifactId> 
    <version>4.12</version> 
    <scope>test</scope> 
</dependency> 

다음 각 서브 모듈에서 사용 : 그래서 다음과 같이 부모의 pom.xml에 의존성을 추가 한 정도로 될 것이라고 생각

import static org.junit.Assert.assertEquals; 
import static org.junit.Assert.assertFalse; 
import static org.junit.Assert.assertNotNull; 
import static org.junit.Assert.assertTrue; 

하지만 난처럼 이클립스에서 오류를 얻고있다 : The import org.junit cannot be resolved

Maven-> Update 프로젝트 또는 mvn clean install을 수행하면 오류가 전혀 없습니다.

<parent> 
    <groupId>pl.daniel.erp</groupId> 
    <artifactId>erp</artifactId> 
    <version>0.0.1-SNAPSHOT</version> 
</parent> 

+0

당신이 아이 리딩에서 부모를 선언 했습니까? – Compass

+0

포스트 체크를 업데이트했습니다. thx – masterdany88

+0

흠. 내가 갈 것이다 : http : // stackoverflow.com/questions/3211643/maven2-sharing-dependencies-parent-and-children-without-redeclaring-depe이게 문제가되지 않는다면, Eclipse에서 완전한 클린 빌드를 시도하십시오. 아마 어리석은 설정 문제 나 이클립스가 가득 차서 깨끗해질 필요가있다. – Compass

답변

1

AJNeufeld :

"하지만 여전히 자식 모듈의 종속성을 지정해야합니다"

종속성이 < 종속성 관리 > 인 경우에만 정확합니다. < 종속성 >을 부모 < 종속성 >에 설정하고 자식 종속성을 전혀 설정하지 마십시오.

부모 POM :

<project> 
... 
<dependencies> 
    ... 
    <dependency> 
    <groupId>junit</groupId> 
    <artifactId>junit</artifactId> 
    <version>4.12</version> 
    <scope>test</scope> 
    </dependency> 
    ... 
<dependencies> 
... 
</project> 

하위 POM :

<project> 
    ... 
    <!-- no junit dependency defined at all --> 
    ... 
</project> 
+0

그래서'와''태그 사이의 차이는 무엇입니까? 왜 둘 다 존재합니까? – masterdany88

+0

는 일종의 "추상"선언입니다 (추상 클래스와 같은 아이디어 :) 어디에서나 부모 프로젝트 트리에서는 공통 설정 (예 : 버전, 범위 등)을 선언 할 수 있지만 정의 된 경우에만 클래스 경로에 종속성이 추가됩니다 in . dependencyManagement에 있으면 실제 종속성에는 groupId/artifactId 만 있어야합니다. 그래서 계층 적 설정을위한 많은 공간이 있습니다 ... 에 대해서도 똑같습니다. 그리고 플러그인을 사용하면 큰 특정 구성을 가질 수 있기 때문에 훨씬 더 유용합니다. – Vadim

+0

그래서 ... "grand-parent"는 공통 설정으로 를 가질 수 있습니다. 그 자식은 특정 설정으로 실제 을 가질 수 있으며 모든 "children"은 플러그인을 전혀 정의 할 필요가 없습니다. 실제로 저는 100 개 이상의 프로젝트가 있습니다. 모든 종속성 버전과 플러그인은 한 곳에서만 정의됩니다. 버전 업그레이드를 통해 손쉽게 관리 할 수 ​​있습니다. – Vadim

0

당신은 부모의 종속성을 구성 할 수 있습니다 도와주세요,하지만 당신은 여전히 ​​자식 모듈의 종속성을 지정해야합니다

나는 어린이 다음과 같은 하나의 부모 모듈을 참조하십시오. 이렇게하면 부모 POM에 번을 번 지정하고 모든 하위 모듈에서 해당 버전을 사용하도록 할 수 있습니다. 각 하위 모듈은 여전히 ​​종속성을 나열해야합니다.

부모 POM :

<project> 
    ... 
    <dependencyManagement> 
     <dependencies> 
      <dependency> 
       <groupId>junit</groupId> 
       <artifactId>junit</artifactId> 
       <version>4.12</version> 
       <scope>test</scope> 
      </dependency> 
     ... 
     <dependencies> 
    </dependencyManagement> 
    ... 
</project> 

아이 리딩 :

<project> 
    ... 
    <dependencies> 
     <dependency> 
      <groupId>junit</groupId> 
      <artifactId>junit</artifactId> 
     </dependency> 
     ... 
    </dependencies> 
    ... 
</project>