그래서 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를 사용자 정의/구성 할 수있는 방법이 있다면, 그에 대해 듣게되어 기쁩니다.
https://jira.springsource.org/browse/ROO-120 – Stefan
.roo 파일을 첨부 할 수 있습니까? – eruiz