2011-10-16 125 views
0

我有2個項目。包含一些組件(POJO)的插件項目和包含相應單元和集成測試的片段項目。我正在使用Tycho來構建這些項目,並且我想使用Spring來引導我的集成測試。Spring應用程序上下文無法加載配置文件

我註解我測試類,

@ContextConfiguration(locations = { "classpath*:spring/*-config.xml" }) 
@RunWith(SpringJUnit4ClassRunner.class) 

但是當我嘗試建立與第谷(clean install)項目或Eclipse中運行測試類的插件,測試,春天抱怨說沒有在上下文中定義bean。在日誌中,我發現下面幾行:

DEBUG o.s.t.c.s.AbstractGenericContextLoader - Loading ApplicationContext for 
     locations [classpath*:spring/*-config.xml]. 
DEBUG o.s.b.f.xml.XmlBeanDefinitionReader - Loaded 0 bean definitions from 
     location pattern [classpath*:spring/*-config.xml] 

我已經把配置文件src/main/java/spring/src/main/resources/spring但春天下無法找到他們。我也嘗試將這些路徑顯式添加到清單中的bundle-classpath。

當我改變配置路徑"file:spring/some-config.xml"彈簧加載我的bean定義,但崩潰時它會嘗試加載與下面的輸出的「上下文」模式:

Configuration problem: Unable to locate Spring NamespaceHandler for XML schema 
namespace [http://www.springframework.org/schema/context] 

爲什麼不與工作類路徑前綴?爲什麼它使用文件前綴?我認爲文件前綴只適用於文件系統而不適用於jar文件......我做錯了什麼?

在此先感謝

更新:這裏是(片段)測試項目的完整視圖:

/ 
+-- src/main/java/ 
| +-- MyTestClass.java 
| 
+-- src/main/resources/ 
| +-- spring/ 
| | +-- some-config.xml 
| +-- log4j.properties 
| 
+-- META-INF/ 
| +-- MANIFEST.MF 
| 
+-- pom.xml 

第谷之後一直試圖執行我的測試類我看到下面的文件目標下:

/target 
| 
+-- classes/ 
    +-- MyTestClass.class 
    +-- spring/ 
     +-- some-config.xml 
    +-- log4j.properties 
+-- work/ // contains the eclipse configuration (config.ini, etc.) 
+-- MANIFEST.MF 
+-- mybundle-xx.jar 

我已經省略了屬性和surfire文件。在target/work/configuration /目錄下生成的config.ini將清單中提到的所有捆綁包列爲必需捆綁軟件包。除了我的測試片段包之外,它們被引用爲jar文件。對於測試包,存在以下條目:

reference\:file\:C\:/[...]/workspaces/workspace/my.bundle.tests 

這是正確的嗎?它至少可以解釋爲什麼文件前綴正在工作...... 但是類路徑前綴呢?清單是否已被複制到目標文件夾中的正確位置?我的意思是它不在dev.properties中引用的classes文件夾之外。
此外,log4j在啓動時抱怨它沒有正確配置,這表明它無法在類路徑中找到log4j.properties。

更新:現在我嘗試另一種方式。我讀過this article,它似乎是讓事情順利運行的一種更簡單的方法。所以我將maven-surfire-plugin添加到我的pom中,並將我的包裝類型從「eclipse-test-plugin」更改爲「jar」,這樣tycho就不會運行它自己的surefire-plugin。但現在我站在另一個問題的前面。 Spring似乎只爲maven2存儲庫提供ArtifactLocator,而不是像tycho使用的p2存儲庫。
有沒有人知道是否有一個ArtifactLocator p2倉庫在那裏?

是否有人使用與tycho,osgi和spring相同的設置進行集成測試?

+0

檢查您的xml上下文配置是否與jar文件打包在一起。 – hellectronic

+0

是的。配置文件位於jar「/spring/some-config.xml」的根文件夾下。並在清單中爲「。」指定一個類路徑條目。已被添加。 –

回答

1

spring-context-xx.jar放在您的類路徑中。

命名空間由NamespaceHandler接口的實現處理。在啓動時,Spring將加載所有這些文件,並嘗試使用加載的處理程序解析每個命名空間。如果他們中沒有一個聲稱能夠解析它,則拋出異常。名稱空間context:由駐留在上述jar中的ContextNamespaceHandler進行解析。

+1

我已將spring-context-xx.jar添加到清單中所需的捆綁包中。由於我的插件在OSGi容器中運行,我認爲這足夠了。 Spring框架捆綁不是OSGi意識到的嗎? –

+0

默認情況下 - 我不認爲他們是。我認爲他們應該是osgi'ed – Bozho

+0

@ coding.mof否,正常的捆綁包不是OSGi感知的,但是[OSGi捆綁軟件存在](http://www.springsource.org/osgi)。 –

相關問題