2013-05-09 61 views
0

我一直堅持使用這一段現在。我已經創建了這個項目的一個小子集,並且重現了這個問題。基本上我正在運行一個測試,它將一個bean的spring上下文文件加載到ClassPathXmlApplicationContext對象中。彈簧加載上下文配置文件時發生Java異常 - 發生在UNIX而非Windows中

奇怪的是,在Windows上,當我從IDE(Eclipse/Intellij)運行時,以及在運行maven命令行時,測試通過的很好。當從UNIX機器(紅帽企業Linux 5)運行測試時(這是代碼不可避免的結果),它會失敗。

在下面的異常中抱怨LookUtils類。我看不出它爲什麼要創建這個類,但我注意到的一件事是它有一個私有構造函數。另外,我使用spring v2.5.6,出於安全原因必須堅持這一點。我很堅持這一個,所以任何幫助將不勝感激。

謝謝。

這裏是個例外:

------------------------------------------------------------------------------- 
Test set: StartupTest.AppTest 
------------------------------------------------------------------------------- 
Tests run: 1, Failures: 0, Errors: 1, Skipped: 0, Time elapsed: 0.458 sec <<< FAILURE! 
testGuiStartup(StartupTest.AppTest) Time elapsed: 0.43 sec <<< ERROR! 
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'lookAndFeelConfigurer' defined in class path resource [startup-context.xml]: Error setting property values; nested exception is org.springframework.beans.PropertyBatchUpdateException; nested PropertyAccessExceptions (2) are: 
PropertyAccessException 1: org.springframework.beans.MethodInvocationException: Property 'popupDropShadowEnabled' threw exception; nested exception is java.lang.ExceptionInInitializerError 
PropertyAccessException 2: org.springframework.beans.MethodInvocationException: Property 'theme' threw exception; nested exception is java.lang.NoClassDefFoundError: Could not initialize class com.jgoodies.looks.LookUtils 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1279) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1010) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:472) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory$1.run(AbstractAutowireCapableBeanFactory.java:409) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:380) 
    at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:264) 
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222) 
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:261) 
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:185) 
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:164) 
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:429) 
    at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:728) 
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:380) 
    at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:139) 
    at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:83) 
    at StartupTest.AppTest.testGuiStartup(AppTest.java:9) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
    at java.lang.reflect.Method.invoke(Method.java:585) 
    at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:44) 
    at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15) 
    at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:41) 
    at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:20) 
    at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:76) 
    at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:50) 
    at org.junit.runners.ParentRunner$3.run(ParentRunner.java:193) 
    at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:52) 
    at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:191) 
    at org.junit.runners.ParentRunner.access$000(ParentRunner.java:42) 
    at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:184) 
    at org.junit.runners.ParentRunner.run(ParentRunner.java:236) 
    at org.apache.maven.surefire.junit4.JUnit4TestSet.execute(JUnit4TestSet.java:53) 
    at org.apache.maven.surefire.junit4.JUnit4Provider.executeTestSet(JUnit4Provider.java:123) 
    at org.apache.maven.surefire.junit4.JUnit4Provider.invoke(JUnit4Provider.java:104) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
    at java.lang.reflect.Method.invoke(Method.java:585) 
    at org.apache.maven.surefire.util.ReflectionUtils.invokeMethodWithArray(ReflectionUtils.java:164) 
    at org.apache.maven.surefire.booter.ProviderFactory$ProviderProxy.invoke(ProviderFactory.java:110) 
    at org.apache.maven.surefire.booter.SurefireStarter.invokeProvider(SurefireStarter.java:175) 
    at org.apache.maven.surefire.booter.SurefireStarter.runSuitesInProcessWhenForked(SurefireStarter.java:107) 
    at org.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java:68) 
Caused by: org.springframework.beans.PropertyBatchUpdateException; nested PropertyAccessExceptions (2) are: 
PropertyAccessException 1: org.springframework.beans.MethodInvocationException: Property 'popupDropShadowEnabled' threw exception; nested exception is java.lang.ExceptionInInitializerError 
PropertyAccessException 2: org.springframework.beans.MethodInvocationException: Property 'theme' threw exception; nested exception is java.lang.NoClassDefFoundError 
    at org.springframework.beans.AbstractPropertyAccessor.setPropertyValues(AbstractPropertyAccessor.java:104) 
    at org.springframework.beans.AbstractPropertyAccessor.setPropertyValues(AbstractPropertyAccessor.java:59) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1276) 
    ... 44 more 

這裏是我的測試:

package StartupTest; 

import org.junit.Test; 
import org.springframework.context.support.ClassPathXmlApplicationContext; 

public class AppTest { 
    @Test 
    public void testGuiStartup() { 
     new ClassPathXmlApplicationContext("startup-context.xml"); 
    } 
} 

這裏是我的背景文件:

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" 
     "http://www.springframework.org/dtd/spring-beans.dtd"> 

<beans> 
    <bean id="lookAndFeelConfigurer" class="org.springframework.richclient.application.config.JGoodiesLooksConfigurer"> 
     <property name="popupDropShadowEnabled" value="false"/> 
     <property name="theme"> 
      <bean class="com.jgoodies.looks.plastic.theme.ExperienceRoyale"/> 
     </property> 
    </bean> 
</beans> 

這裏的pom.xml

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 
    <modelVersion>4.0.0</modelVersion> 

    <groupId>StartupTest</groupId> 
    <artifactId>StartupTest</artifactId> 
    <version>1.0-SNAPSHOT</version> 
    <packaging>jar</packaging> 

    <name>StartupTest</name> 
    <url>http://maven.apache.org</url> 

    <properties> 
     <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> 
    </properties> 

    <dependencies> 
     <dependency> 
      <groupId>junit</groupId> 
      <artifactId>junit</artifactId> 
      <version>4.8</version> 
      <scope>test</scope> 
     </dependency> 
     <dependency> 
      <groupId>org.springframework</groupId> 
      <artifactId>spring</artifactId> 
      <version>2.5.6</version> 
     </dependency> 
     <dependency> 
      <groupId>com.jgoodies</groupId> 
      <artifactId>looks</artifactId> 
      <version>2.0.4</version> 
     </dependency> 
     <dependency> 
      <groupId>org.springframework.richclient</groupId> 
      <artifactId>spring-richclient-support</artifactId> 
      <version>0.2.1</version> 
     </dependency> 
    </dependencies> 
</project> 
+0

它看起來像jgoodies的外觀庫不在類路徑中。 – 2013-05-09 12:38:29

+0

但是,如果將它添加爲Maven依賴關係,它會自動添加到類路徑中?如何確認/解決這個問題? – user528827 2013-05-09 12:47:02

+0

對不起。我誤解了這個問題,並認爲你在運行時得到了這個,而不是執行單元測試。 – 2013-05-09 12:52:07

回答

0

終於明白了這一點。畢竟很簡單。所以它在UNIX(紅帽企業Linux 5)上失敗的原因是因爲這臺機器上沒有圖形界面!沒有侏儒,沒有KDE或任何東西。所以它在嘗試配置應用程序GUI的外觀時感到失敗。事後看來,我應該提到我使用TeamCity來運行這些測試,而且我從來沒有身在RHEL5服務器的前面。

解決方案是創建一個只運行GUI測試的新TeamCity構建,它在Windows機器上執行此操作。

因此,如果在遠程計算機上運行GUI測試,請確保它具有圖形支持!

+0

是在RHEL服務器上設置爲true的java.awt.headless?假設它不是,你可能會得到更有意義的錯誤信息。它應該在沒有gui的服務器中設置爲true。如果是這樣,這是一個jgoodies不檢查的問題,但我認爲他們會檢查它。 – eis 2013-06-14 11:57:49

相關問題