2013-05-09 59 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

相关问题