2010-06-10 127 views
0

我將Eclipse配置爲使用外部Maven實例。儘管如此,我有一個從命令行運行良好的集成測試,但在Eclipse中失敗。該錯誤是一類Spring應用程序上下文的bean錯誤:PropertyPlaceholderConfigurer可以從Maven命令行運行,但不能從Eclipse運行?

Cannot convert value of type [java.lang.String] to required type 

的罪魁禍首嗎,設置使用提供一個PropertyPlaceholderConfigurer屬性值的bean。

<!-- property settings for non-JNDI database connections --> 
<bean id="placeholderConfigUuid" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> 
    <property name="systemPropertiesModeName" value="SYSTEM_PROPERTIES_MODE_OVERRIDE" /> 
    <property name="location" value="classpath:database.properties" /> 
    <property name="placeholderPrefix" value="$DS{" /> 
</bean> 

我知道豆失敗,因爲它,當我與它的工作原理一個靜態值替換$ {DS} hibernate.dialect出現在堆棧跟蹤和感覺。

編輯:這裏就是屬性值用於:

<bean id="myTestLocalEmf" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean"> 
    <property name="persistenceUnitName" value="myapp-core" /> 
    .......ommitted for brevity....... 
    <property name="jpaVendorAdapter"> 
     <bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter"> 
      <property name="showSql" value="true" /> 
      <!-- The following use the PropertyPlaceholderConfigurer but it doesn't work in Eclipse --> 
      <property name="database" value="$DS{hibernate.database}" /> 
      <property name="databasePlatform" value="$DS{hibernate.dialect}" /> 
     </bean> 
    </property> 
</bean> 

我有兩個問題:

1)由於m2eclipse的是使用相同的Maven設置爲命令行,爲什麼一個工作另一個失敗? 2)如何解決這個問題?我非常喜歡能夠在需要時從Eclipse內部運行單個jUnit測試。

回答

0

您正在使用在Eclipse中使用Maven 3的M2Eclipse(最新版本?),但我假設您在命令行上使用Maven 2(2.2.1?)...另一方面,您是說你的「集成測試」是在命令行上運行(構建一個環境等),但是你想在Eclipse中運行「單元測試」......單元測試與集成測試不同......我我不驚訝你的集成測試不能從Eclipse中工作......如果我們看到使用的POM和代碼,可能我們可以說更多嗎?

+0

是的 - 我正在使用Maven 2(2.2.1)。該測試是一個真正的「集成」測試。在Eclipse中運行它時,我稱它爲「單元」測試,因爲這是Eclipses使用的唯一術語(它不區分)。 「驚訝」是一個偉大的話。看到模具以這種方式行爲是非常令人不安的。如果我不能相信Eclipse vs Maven命令行,那麼這真的很糟糕。 – HDave 2010-06-10 13:10:10

2
  • 過濾是否適用於Eclipse下的「常規」單元測試?
  • 是m2eclipse的配置來處理資源變化的資源和測試資源:

alt text http://www.imagebanana.com/img/rwd919ek/screenshot_008.png

  • 有沒有什麼特別提到你的集成測試(從一個Maven的點)?
+0

是的 - 普通的Maven過濾在Eclipse下工作(這將是我的臨時解決方法)。我的m2Eclipse項目設置與您的屏幕截圖完全相似,只是我沒有WTP配置器。 我有這個項目的另一個模塊使用PPC,它的工作原理,所以它必須是關於這個模塊的東西。另外,我對ignoreUnresolvablePlaceholders使用了默認值false,所以你會認爲PPC會拋出一個異常,而不是返回一個錯誤的字符串。 – HDave 2010-06-10 13:07:28

+0

@HDave實際上,這看起來更像是一個「Spring問題」而不是Maven問題。我真的很想知道集成測試的「特殊」。如果在運行測試之前從Eclipse運行Maven構建,結果會不一樣嗎? – 2010-06-10 13:51:47

+0

經過多小時的研究和調試,我發現了這些。 Maven過濾對我的applicationContext.xml文件工作正常,因爲它是一個測試資源。 Maven過濾在database.properties上打破(我認爲),因爲它是一個「資源」。 所以罪魁禍首不是PPC,而是m2eclipe,事實上,由於某些未知原因,它不會像命令行那樣過濾我的常規資源。但是,如何/爲什麼會有所不同? – HDave 2010-06-10 22:26:45

相關問題