2010-05-21 1 views
3

Maven 프로젝트가 성장함에 따라 프로젝트 구조의 맨 위에 머물러 있습니다. 지금까지 2-3 레벨의 중첩 된 디렉토리 레이아웃이 있습니다. 각 레벨에 PAM이 있고 그 레벨에있는 디렉토리에 해당하는 module 항목이 있습니다. POM 상속 (parent 속성)이 반드시이 내용을 따르는 것은 아니며이 질문의 목적과 관련이 없습니다.Maven 프로젝트에서 중첩 또는 평면 디렉토리 레이아웃의 이유는 무엇입니까?

중첩 된 구조가 Maven에 꽤 자연스럽고 특정 레벨에있는 한 멋지고 깨끗합니다. IDE (Eclipse 및 IntelliJ)에서 볼 때 혼란스러워지기 시작했습니다. 생각).

나는 아파치 펠릭스 소스를 살펴 있었고, 그들은 플랫 디렉토리 구조 것으로 보인다 무엇에 꽤 복잡한 프로젝트를, 그래서이 갈 수있는 더 좋은 방법이 될 것인지 궁금하네요.

실제로 경험 한 두 가지 접근 방법에 대한 장단점은 무엇입니까?

this question (내가 발견 한 것)은 매우 유사합니다. 내가 이것을 공동체로 남겨두고 이것이 공동체로 폐쇄되어야 하는지를 결정할 것이다.

답변

1

나는 일종의 혼합 접근법을 사용합니다.뚜렷한 수명주기 (릴리스 및 따라서 VCS 관점에서 볼 때)가 평평한 경우 라이프 사이클이 동일한 항목이 중첩됩니다. 그리고 체크 아웃에는 svn:externals을 사용합니다. 이 접근법에 대해 this previous answer에 썼습니다.

+0

그 다른 답변은 정말로 감사합니다. –

1

중첩에 투표합니다. IDEA 9를 사용하여 프로젝트 창에 중첩을 표시하므로 프레젠테이션은 논리적 인 프로젝트 구조를 반영합니다. 나는 이름이 매우 유사 특히, 중첩 된 일을 유지 선호

- (이 평평했다. 이는 8.1의 경우 아니었다) - 명령 프롬프트를 사용하는 경우 탐색이 훨씬 쉬워집니다. myapp-layer-component와 같은 이름의 프로젝트가 있으므로 접두사가 모두 같은 접두사로 시작하고 많은 레이어가 같은 레이어를 사용하므로 명령 줄에서 자동 완성을 사용하면 쓸모가 없습니다. 이름 (appname, layer 또는 component)의 각 부분이 디렉토리 구조의 각 수준에서 한 번만 반복되므로 중첩 된 구조로 분리하는 것이 훨씬 쉽습니다.

명령 줄에서 빌드하는 경우 프로젝트의 하위 집합을 만드는 것이 훨씬 쉽습니다. db 모델에서 작업 할 경우 해당 영역의 모든 프로젝트를 빌드해야합니다. 파일을 평평하게 만들 때 까다로운 일입니다. 제가 알고있는 유일한 방법은 maven에 -pl 인수를 사용하고 빌드 할 proejct를 지정하는 것입니다. 중첩 된 디렉터리를 사용하면 mvn 디렉터리로 cddb 디렉터리로 방금 실행합니다.

예를 들어

, 대신

myapp-web-gui1 
myapp-web-gui2 
myapp-web-base 
myapp-svc-clustered 
myapp-svc-clustered-integrationtest 
myapp-svc-simple 
myapp-db-model 
myapp-db-hibernate 

우리는 구조 또한 통합 테스트를 위해 둥지를 추가 할 수

\myapp 
    \web 
    \gui1 
     pom.xml 
    \gui2 
     pom.xml (other poms omitted to keep it short) 
    \base 
    \svc 
     \clustered 
     \clustered-it 
     \simple 
    \db 
     \model 
     \hibernate  

을 가지고 있지만이 너무 멀리 포인트를 운전처럼 보인다. 중첩와

, 당신은 또한 상속의 모든 혜택을 얻을 (그리고 그것의 일부는 고통 ... 야)

나는이 함께 했어 유일한 문제는 디렉토리 이름이 이슈 ID와 일치하지 않는다는 것입니다 . (나는 여전히 전체 artifactIds를 사용하고 있습니다.) 그래서 각 프로젝트는 더 이상 부모 pom에서 추론 할 수 없으므로 SCM 경로를 명시 적으로 정의해야합니다. 물론 각 디렉토리는 artifactId와 동일하게 만들 수 있으며 SCM 세부 정보는 상위에서 유추 될 수 있지만 긴 디렉토리 이름은 다소 다루기 힘듭니다.

+0

디렉토리 트리에서 인코딩 될 수 있고 종종 인코딩되는 여러 가지 의미를 어떻게 다룰 것인가? 지. Subversion의 분기/태그? –

+0

다른 예를 들자면, 나는 당신이 묻고있는 것을 얻지 못한다고 생각합니다. – mdma

+0

대규모 프로젝트에는 VCS에 함께 속하는 것, 빌드에 속한 것, 배포 (Zip 등)에서 함께 속하는 것, 개발자가 특정 작업에 대해 IDE에서 필요로하는 것 등 여러 가지 계층이 있습니다 이들은 대개 * 대부분 * 중복되지만 매우 자주 * 매우 비슷하지는 않습니다. 모듈을 재사용 할수록 모듈화가 더욱 어려워지고, 이는 모듈화의 중요한 이유입니다. –

관련 문제