所以經過幾個小時的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的視圖!
如果有辦法可以自定義/配置袋鼠,以避免這些缺陷,我沒有發現,我會很高興聽到他們。
https://jira.springsource.org/browse/ROO-120 – Stefan
可以附加的.roo文件? – eruiz