2012-02-10 5 views
5

는 다음과 같은 엔터프라이즈 애플리케이션 레이어 예를 고려해Maven 프로젝트 구조 생성에 대한 조언 - 다중 모듈 대 다중 프로젝트?

  1. 프로젝트 서비스 -> POJO 서비스 계층을
  2. 프로젝트 웹 -> 웹 응용 프로그램은 WAR로 배포 '프로젝트 서비스'에 따라 달라집니다
  3. 프로젝트 - 웹 서비스 -> 웹 서비스, '프로젝트 서비스'에 의존, 별도의 WAR로 배포, 현재 인터넷에 노출되지 않음
  4. 프로젝트 독립형 -> Cron Jobs는 '프로젝트 서비스'에 따라 다름

Maven에서 이것을 구성하는 올바른 방법은 무엇입니까? 다중 모듈 메이븐 프로젝트를 생성해야합니까? '프로젝트 서비스'가 Maven 모듈 인 경우 독립적 인 배포 가능한 유닛 인 다른 세 프로젝트와 공유 할 수 있습니까?

이전 프로젝트에서 나는 4 개의 다른 Maven 프로젝트를 만들었으며 결코 다른 것을 필요로하지 않았습니다.

이전에 해왔 던 것보다 나은 방법이 있는지 확인하고 싶습니다.

답변

2

실제로 두 방법 중 하나를 수행 할 수 있습니다. 그것이 정말로 하나의 커다란 프로젝트라면, 동시에 빌드하고 릴리스하기를 원한다면 다중 모듈 프로젝트가 적합 할 것입니다.

pom project (top level project that would define all of the modules) 
    jar project (project-services) 
    war project (project-web) 
    war project (project-web-services) 
    project-standalone (wasn't sure if this was a jar, or just some scripts, etc) 

그래서 당신은 단지 구축하고 루트 프로젝트를 해제 것, 그것은 당신을 위해 서브 모듈의 모든 돌볼 것 : 당신이 아마처럼 설정할 것입니다. 그들은 각각 서로에게 의존성을 가질 수 있습니다 (순환 종속성에주의하십시오). 그리고 너는 갈 준비가되어있을거야.

다른 옵션은 모두 개별 아티팩트입니다. 이점은 다른 릴리스주기입니다. 종종 변경되지 않는 jar 라이브러리가있을 때 유용한 옵션이지만 전쟁을 자주 업데이트합니다.

분명히, 당신은 믹스를 가질 수 있습니다. 그래서 항아리는 독립형이지만 두 개의 war 파일을 포함하는 다중 모듈 프로젝트가 있습니다. Maven의 이점은 비즈니스 의사 결정이 어떻게 분할되어야하는지에 상관없이 처리 할 수있을만큼 유연하다는 것입니다.

0

필자는 공통 타사 라이브러리의 사용 된 버전이 일치하는지 확인하기 위해 모듈 프로젝트와 함께 하나의 프로젝트를 진행할 것입니다.

POM 프로젝트를 루트로두고 모든 구현 및 기타 인공물을 공유하는 것은 일반적으로 단일 모듈 프로젝트를 제외한 모든 작업에 좋은 방법으로 간주됩니다.

1

제 직장에서는 도서관을 공유하는 많은 최상위 프로젝트가 있습니다 (15 개 최상위 프로젝트는 35 개 정도의 라이브러리를 공유합니다). 우리는 라이브러리 접근법 당 단일 프로젝트를 진행했습니다. 오늘날 우리는 모든 것을 한 번에 풀어야 할 때 악몽입니다.

일부 문제는 우리가 직면

  • 수동으로 종속성을 파악
  • 가 올바른 순서로 릴리스를 실행해야
  • 하나 개 고장이 나는 D에 있던 경우에 전체 릴리스

을 중지 다시 한번 (이 모든 것을 설정하는 것을 도왔습니다), 저는 하나의 다중 모듈 프로젝트를 사용할 것입니다. 그 외에는 한 번에 모든 것을 공개하는 것이 큰 이점입니다. 프로젝트는 일식에서 꽤 보이지 않을 수도 있지만 어쨌든 당신이 목표로 삼아야하는 것은 아닙니다.

+0

하나의 커다란 프로젝트의 단점은 변경 사항이없는 아티팩트를 자주 발표한다는 것입니다. 릴리스 문제를 이해합니다. 아마도 릴리스 할 때마다 모든 아티팩트를 실제로 변경하는 경우가 있습니다.이 경우 번거 로움이 적습니다. 그러나 때로는 하나의 이슈를 릴리스해야 할 때 변경없이 모든 것을 해제하는 것이 이상적이지 않습니다. – Michael

0

모듈간에 직접적인 종속성이 있으므로 다중 모듈 프로젝트에도 권장됩니다.

자주 추천하는 것은 모듈의 수명주기를 고려하는 것입니다. 예를 들어, 일괄 처리 모듈을 서비스 계층보다 더 자주 릴리스하는 경우 분리하여 분리 할 수 ​​있습니다. 따라서 변경 사항이없는 항목을 배포 (배포) 할 필요가 없습니다. 배치는 일반적으로 .war 파일과 같은 방식으로 배포되지 않으므로 하지만 이는 서비스 + 배치 모듈의 수명주기에 달려 있습니다.

대부분의 경우 나란히 이동합니다. 그래서 "모두를위한 하나"에 대한 +1 +1

관련 문제