2014-02-28 161 views
1

我試圖使用Spring Roo(1.2.4)與maven多模塊項目,並有很多困難。我的實體在一個模塊中聲明,而webapp在另一個模塊中聲明。很明顯,webapp將實體模塊列爲依賴項。如何在一個maven多模塊項目中使用Spring ROO?

但是,無論何時我在webapp中打開ROO shell,我都無法爲任何@Roo註釋類型生成任何Roo Aspects。例如,

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

沒有任何影響,除非我的webapp項目包含com.ia.domain.User類。如果我將該實體保留在單獨的模塊中,則ROO不會生成任何服務方面。如果我的實體添加到我的webapp項目,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> 

這僅僅是多餘的,且潛在地易於使用Maven釋放小插件錯誤等

此外,即使所有的插件版本在我父母的<pluginManagement>部分中定義,孩子們都需要使用<plugins>中指定的版本,這使得版本管理非常困難。事實上,Roo似乎忽略了<pluginManagement>,因爲每個孩子都必須重複更多配置。

也許我與Roo最大的寵愛是我不能在我的pom.xml中指定我自己的版本。如果我想要Roo使用的特定版本的庫,Roo會覆蓋我指定的任何版本,並設置它自己的版本。因此,如果我想使用更新版本的Spring庫(例如:Spring-Data),每次嘗試創建Repository時,Roo都會降級它。

要做的一切,只是爲了讓小豆看到該項目作爲一個多模塊項目。既然它是可見的,我發現我只能在父級打開shell。如果我在孩子上打開一個Roo shell,它會刪除我原來的帖子中提到的任何Roo方面。我需要在父級上打開Roo shell,然後使用

module focus --moduleName entities 

可以在孩子身上工作。這意味着我總是需要在Eclipse/STS中打開/​​導入父項目,這可能並不總是我想做的事情。

下一個限制是,即使我切換到實體模塊,Roo不會爲我在那裏使用entity jpa --class ~.domain.User創建實體,因爲Roo不瞭解我的jpa設置是在我的webapp模塊中完成的。所以我僅限於在與我的jpa設置相同的模塊中創建我的實體。

對於我的JPA設置,我配置的Spring不使用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-jpa.xml文件,database.properties文件(儘管我希望我所有的數據庫配置是通過JNDI)和事務的配置我applicationContext.xml文件中,即使我已經有了我的所有配置已經在一個applicationContext-hibernate.xml文件中定義。可能不是最大的問題,但我不喜歡Roo強迫我的手並強加我的applicationContext文件的特定佈局的事實。如果我想給他們一些不同的東西,我甚至無法做到。

總的來說,我發現袋鼠是有趣的使用,但所有這些限制使我意識到,這只是沒有準備好大項目的開發。即使我沒有使用Tiles2,我甚至無法讓它停止生成Tiles2的視圖!

如果有辦法可以自定義/配置袋鼠,以避免這些缺陷,我沒有發現,我會很高興聽到他們。

+0

這將是巨大的,如果你可以在JIRA https://jira.springsource.org/browse/ROO創建這些問題 – eruiz

+0

@eruiz - 有手頭這裏,但相互交織的許多問題。任何建議如何打破他們在Jira? –

+0

我只看到支持來覆蓋依賴版本,請注意,Roo不可能控制所有可能的變體來執行某些操作,所以Roo只能以一種方式設置您的項目。 – eruiz