簡體   English   中英

如何將Spring ROO與maven多模塊項目一起使用?

[英]How to use Spring ROO with a maven multi-module project?

我正在嘗試使用Spring Roo(1.2.4)和maven多模塊項目,並且遇到很多困難。 我的實體在一個模塊中聲明,而webapp在另一個模塊中聲明。 顯然,webapp將實體模塊列為依賴項。

但是,每當我在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

但是,一旦我從項目中刪除了User類並將其保留在我的依賴項中,Roo就會刪除這些方面:

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參與這個項目嗎?

因此,在玩了幾個小時的ROO和我的多個maven項目並發現了幾件事之后。

首先,盡管我喜歡使用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)

雖然這對maven來說很好,但這對Roo來說並不好。 為了讓Roo將其視為一個多模塊項目,我必須按如下方式對其進行重組:

+ 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)

不是最大的問題,但我寧願將父親pom作為自己的工件與模塊解除關聯。 不是Roo可以處理的東西。

此外,我不能讓子項目繼承父版本。 我必須在每個模塊中明確設置子版本,這需要更多的管理工作,而且不那么干凈。 所以目前,我已經將每個孩子定義為存在

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

這是多余的,並且可能容易出現maven-release-plugin等錯誤。

此外,即使所有插件版本都在我父級的<pluginManagement>部分中定義,所以孩子們也需要在他們的<plugins>指定版本,這使得版本管理非常困難。 實際上,看起來<pluginManagement>幾乎被Roo忽略了,因為每個子<pluginManagement>都必須重復其他配置。

可能我對Roo最大的煩惱是我無法在我的pom.xml指定自己的版本。 如果我想要一個Roo使用的特定版本的庫,Roo將覆蓋我指定的任何版本,並設置它自己的版本。 因此,如果我想使用更新版本的Spring lib(例如:Spring-Data),Roo將在每次嘗試創建存儲庫時繼續降級它。

所有這一切只是為了讓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>

Roo不喜歡這樣,並堅持使用persistence.xml文件, applicationContext-jpa.xml文件, database.properties文件(即使我希望所有數據庫配置都通過JNDI)和applicationContext.xml事務配置applicationContext.xml文件,即使我已經在applicationContext-hibernate.xml文件中定義了所有配置。 可能不是最大的問題,但我不喜歡Roo強迫我的手並強加我的applicationContext文件的特定布局。 如果我想把它們稱為不同的東西,我甚至無法做到。

總的來說,我發現使用Roo很有趣,但所有這些限制讓我意識到它還沒有為大型項目開發做好准備。 即使我沒有使用Tiles2,我甚至無法讓它停止為Tiles2生成視圖!

如果有方法來定制/配置Roo以避免我沒有發現的這些陷阱,我會很高興聽到它們。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM