2012-10-09 3 views
1

현재 작업하고있는 프로젝트의 프로젝트 구조를 정의하고 있습니다. 이 프로젝트는 간단한 SOA 구현이며 grails 앱과 다양한 서비스를 제공합니다.다중 모듈이있는 Grails/IntelliJ 설정

이러한 서비스를 별도의 모듈 (jar)로 패키지화하여 별도로 쉽게 배포 할 수 있고 비용이 많이 들지도 않습니다. 이 서비스는 결국 별도로 배포 할 동안 내가 같은 때까지 응용 프로그램 하나 Grails에로 패키지 할 지역 개발의 용이성을 위해,

Grails App (war) 
|__ Service Gateway (jar) 
    |__Service A (jar) 
    |__Service B (jar) 

:

프로젝트 구조와 의존성은 다음과 같이 시각화 될 수있다 그들을 깨뜨리는 것이 필요합니다.

내 궁극적 인 목표는 같은 방식으로 이러한 서비스를 개발할 수 있어야한다는 것이 었습니다. 간단한 Grails 앱을 사용하여 모든 모듈에서 모듈을 변경할 수있게되었고, .

이 구조를 나타내는 IntelliJ에서 가장 좋은 방법을보기 위해 고심하고 있습니다.

위의 각각에 대해 별도의 모듈을 생성하고 이들 사이의 의존성을 추가했지만, 분명히 grails는 런타임에이 사실을 알지 못합니다.

다음과 같은 가능한 해결책을 찾았습니다. 모든 해결책은 항아리가 빌드되어 즉시 클래스를 다시로드 할 수 없다는 점에서 불만족 스럽습니다.

  1. 모듈을 로컬 메이븐 저장소에 설치하고 grails build dependancies에서이를 참조하십시오.
  2. 빌드 된 jar를 lib 디렉토리에 놓습니다.
  3. grails 플러그인으로 추가하십시오 (grails 기능을 필요로하지 않으므로 약간 무거워 보입니다).
  4. grails 클래스 경로에 이러한 모듈의 출력 디렉토리를 포함하는 다른 방법을 찾아보십시오 (가장 명확한 방법은 없습니다).

고마워요!

+0

내 경험에 비추어 볼 때, Grails <2.0.4는 서비스를 즉시 수정할 때 안정성에 어려움을 겪고 있습니다. 나는 보통 view 코드가 아닌 다른 것을 변경할 때마다 grails를 재시작한다. 항아리에 패키지 된 서비스 아티팩트를 유지하고 싶다고 생각하면, 지금 당신이 당신의 dev 설치 프로그램으로 달을 향해 촬영하고있는 것 같아요. 즉, 옵션 1 또는 2로 갈 것입니다. –

+0

스티브에게 감사 드리며, 마찰이 적은 빠른 개발을 의미하는 경우 유물이 현재 개발 환경에서 항아리에 포장되지 않아서 기쁩니다. 분명히 이것들은 배포시에 패키지됩니다. –

답변

0

결국 나는 다중 모듈 메이븐 빌드를 사용했다. 즉석 코드 배포의 핵심은 JRebel을 사용하여 출력 디렉토리를 모니터링하고 변경 될 때 클래스를 다시로드하는 것입니다.

관련 문제