我有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相同的設置進行集成測試?
檢查您的xml上下文配置是否與jar文件打包在一起。 – hellectronic
是的。配置文件位於jar「/spring/some-config.xml」的根文件夾下。並在清單中爲「。」指定一個類路徑條目。已被添加。 –