2014-02-28 3 views
1

필자는 maven 다중 모듈 프로젝트에서 Spring Roo (1.2.4)를 사용하고 많은 어려움을 겪고 있습니다. 내 엔티티는 하나의 모듈에서 선언되고 webapp는 다른 모듈에서 선언됩니다. 분명히 webapp에는 엔티티 모듈이 종속성으로 나열되어 있습니다.Maven 다중 모듈 프로젝트에서 Spring ROO를 사용하는 방법은?

그러나 webapp에서 ROO 셸을 열 때마다 어떤 @Roo 주석이있는 유형의 Roo Aspects도 생성 할 수 없습니다. 내 웹 애플리케이션 프로젝트는 com.ia.domain.User 클래스를 포함하지 않는 예를 들어,

@RooService(domainTypes = { com.ia.domain.User.class }) 

에는 영향을주지 않습니다. 해당 엔티티를 별도의 모듈에 보관하면 ROO는 서비스 측면을 생성하지 않습니다. 내 웹 애플리케이션 프로젝트에 개체를 추가하는 경우, ROO가 필요한 측면을 생성합니다

:

Created SRC_MAIN_JAVA/com/ia/service/UserService_Roo_Service.aj 
Created SRC_MAIN_JAVA/com/ia/service/UserServiceImpl_Roo_Service.aj 

을하지만, 내 프로젝트에서 사용자 클래스를 삭제하고 내 의존성에두고 일단, 루는 부분을 삭제

Deleted SRC_MAIN_JAVA/com/ia/service/UserService_Roo_Service.aj - empty 
Deleted SRC_MAIN_JAVA/com/ia/service/UserServiceImpl_Roo_Service.aj - empty 

다중 모듈을 지원하도록 Roo를 구성하는 특별한 방법이 있습니까, 아니면 이것이 Roo의 한계입니까? 이 프로젝트를 위해 Roo없이 붙어 있습니까?

+0

https://jira.springsource.org/browse/ROO-120 – Stefan

+0

.roo 파일을 첨부 할 수 있습니까? – eruiz

답변

3

그래서 ROO와 멀티 - 메이븐 프로젝트로 몇 시간 동안 놀고 몇 가지를 발견했습니다.

내가 무엇보다도 Roo를 사용하면서 즐긴만큼 엔터프라이즈 수준의 프로젝트가 준비되어 있다고 생각하지 않는다. Roo는 pom.xml 및 applicationContext.xml 파일의 구조, 디자인 및 명명 규칙에 너무 많은 한계와 강요가있는 것으로 보입니다.

+ Project Root 
    pom.xml (only lists modules) 
    + parent-pom/ 
     pom.xml (pom: lists all the project-level dependency versions/plugin versions/etc 
    + entities/ 
     pom.xml (jar: contains all the project's entities) 
    + webapp/ 
     pom.xml (war: contains the BO and webapp design) 

이 받는다는 괜찮했지만, 그것은 루에 대한 좋은 없었다 다음과 같이

내 멀티 모듈 프로젝트가 구성되었다. 루 멀티 모듈 프로젝트 작업으로 이것을 보게하기 위해, 다음과 같이 나는 그것을 재구성했다 :

+ Project Root 
    pom.xml (lists all the project-level dependency versions/plugin versions/etc + modules) 
    + entities/ 
     pom.xml (jar: contains all the project's entities) 
    + webapp/ 
     pom.xml (war: contains the BO and webapp design) 

없는 가장 큰 문제지만, 차라리 자신의 유물과 부모 치어를했을 것이다 모듈에서 분리. Roo가 처리 할 수있는 것이 아닙니다.

또한 자식 프로젝트가 상위 버전을 상속받을 수 없습니다. 각 모듈에 명시 적으로 하위 버전을 설정해야하는데 관리가 더 힘들고 조금 덜 깨끗합니다. 순간, 난 그냥 불필요하고 받는다는 출시 - 플러그인 오류에 잠재적 경향이

<version>${project.parent.version}</version> 

또한, 비록 모든 인 것으로 각각의 아이를 정의한 그래서 플러그인 버전은 부모의 내 <pluginManagement> 섹션에 정의되어 있습니다. 어린이는 모두 <plugins>에 지정된 버전을 가져야하므로 버전 관리가 매우 어려워졌습니다. 실제로, <pluginManagement>은 Roo에 의해 모두 무시되는 것처럼 보일 것입니다. 심지어 추가 구성이 각 어린이에서 반복되어야하기 때문입니다.

아마도 내 가장 큰 애완 동물 인 Roo는 내 pom.xml에 내 버전을 지정할 수 없다는 것입니다. Roo에서 사용하는 라이브러리의 특정 버전을 원한다면 Roo는 내가 지정한 버전을 무시하고 자체 버전을 설정합니다.따라서 Spring lib (예 : Spring-Data)의 최신 릴리스를 사용하려는 경우 Roo는 저장소를 만들려고 할 때마다이를 다시 다운 그레이드 할 것입니다.

Roo가 프로젝트를 다중 모듈 프로젝트로보기 만하면됩니다. 이제 볼 수있게되었으므로 부모 수준에서만 셸을 열 수 있음을 알게되었습니다. 내가 Roo 쉘을 아이에게 열면 원래 게시물에서 언급 한 Roo 측면이 삭제됩니다. 부모에게 Roo 셸을 열어야합니다. 그리고 나서

module focus --moduleName entities 

을 사용할 수 있습니다. 이것은 내가 항상하고 싶은 일이 아닌 Eclipse/STS에서 부모 프로젝트를 열거 나 가져와야 할 필요가 있음을 의미합니다.

다음 제한 사항은 엔티티 모듈로 전환하더라도 Roo가 내 webapp 모듈에서 jpa 설정이 완료되었다는 것을 Roo가 이해하지 못하기 때문에 entity jpa --class ~.domain.User을 사용하여 내 엔티티를 생성하지 않습니다. 그래서 저는 jpa setup과 같은 모듈에 엔티티를 만드는 것으로 제한됩니다. 내 JPA 설정과 관련하여

, 나는 persistence.xml 파일을 사용하지 봄을 구성하고, 대신 상대가 LocalContainerEntityManagerFactoryBean 사용

<bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean"> 
     <property name="dataSource" ref="dataSource"/> 
     <property name="jpaVendorAdapter" ref="hibernateJpaVendorAdapter"/> 
     <property name="packagesToScan" value="com.ia.domain"/> 
     <property name="jpaProperties"> 
      <props> 
       <prop key="hibernate.dialect">org.hibernate.dialect.MySQL5InnoDBDialect</prop> 
       <prop key="hibernate.query.substitutions">true '1', false '0'</prop> 
       <prop key="hibernate.generate_statistics">true</prop> 
       <prop key="hibernate.show_sql">false</prop> 
       <prop key="hibernate.format_sql">true</prop> 
       <prop key="hibernate.hbm2ddl.auto">update</prop> 
       <prop key="hibernate.ejb.naming_strategy">org.hibernate.cfg.ImprovedNamingStrategy</prop> 
       <prop key="hibernate.connection.charSet">UTF-8</prop> 
      </props> 
     </property> 
    </bean> 

루가 좋아하지 않는, 그리고는 persistence.xml 파일을 가지고 주장 파일, 내 applicationContext.xml 파일 내의 database.properties 파일 (모든 DB 구성이 JNDI를 통해 이루어지기를 원할지라도) 및 트랜잭션 구성이 내 applicationContext.xml 파일 내에 있습니다. 이미 모든 구성이 이미 applicationContext-hibernate.xml 파일에 정의되어 있습니다. 아마도 가장 큰 문제는 아니지만 Roo가 내 손을 강제로 내 applicationContext 파일의 특정 레이아웃을 부과한다는 사실을 좋아하지 않습니다. 나는 그들을 다른 무언가라고 부르기를 원한다면 나는 할 수 없을 것이다.

전반적으로 Roo는 사용하기가 재미 있지만, 이러한 모든 제한 사항 때문에 대규모 프로젝트 개발에 준비가되지 않았다는 것을 알게되었습니다. 비록 내가 Tiles2를 사용하지 않더라도 Tiles2에 대한 뷰를 생성하는 것을 멈출 수 없었습니다!

내가 찾지 못한 이러한 함정을 피하기 위해 Roo를 사용자 정의/구성 할 수있는 방법이 있다면, 그에 대해 듣게되어 기쁩니다.

+0

JIRA https://jira.springsource.org/browse/ROO에서이 문제를 만들 수 있다면 좋을 것입니다. – eruiz

+0

@eruiz - 여기에 많은 이슈가 있지만 모두 얽혀 있습니다. Jira에서 그들을 어떻게 무너 뜨릴 수 있을까요? –

+0

필자는 의존성 버전을 덮어 쓰는 지원 만 볼 수 있습니다. Roo가 가능한 모든 변형을 제어하여 Roo가 한 방향으로 만 프로젝트를 설정하는 것은 불가능합니다. – eruiz

관련 문제