spring加载上下文配置文件时出现Java异常-在UNIX中发生,但在Windows中不发生

spring加载上下文配置文件时出现Java异常-在UNIX中发生,但在Windows中不发生,java,spring,unix,exception,maven,Java,Spring,Unix,Exception,Maven,我已经被这个问题困扰了一段时间了。我已经创建了一个发生这种情况的项目的小子集,并复制了这个问题。基本上,我正在运行一个测试,将一个带有一个bean的spring上下文文件加载到一个ClassPathXmlApplicationContext对象中 奇怪的是,在Windows上,当从IDE(Eclipse/Intellij)运行时,以及当我通过maven命令行运行时,我的测试通过得很好。当测试在UNIX机器(Red Hat Enterprise Linux 5)上运行时,它会失败(代码将不可避免地

我已经被这个问题困扰了一段时间了。我已经创建了一个发生这种情况的项目的小子集,并复制了这个问题。基本上,我正在运行一个测试,将一个带有一个bean的spring上下文文件加载到一个ClassPathXmlApplicationContext对象中

奇怪的是,在Windows上,当从IDE(Eclipse/Intellij)运行时,以及当我通过maven命令行运行时,我的测试通过得很好。当测试在UNIX机器(Red Hat Enterprise Linux 5)上运行时,它会失败(代码将不可避免地在这里结束)

在下面的异常中,它抱怨LookUtils类。我不明白它为什么要创建这个类,但我注意到它有一个私有构造函数。另外,我使用的是SpringV2.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
这是我的上下文文件:

<?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>

4.0.0
启动测试
启动测试
1.0-快照
罐子
启动测试
http://maven.apache.org
UTF-8
朱尼特
朱尼特
4.8
测试
org.springframework
春天
2.5.6
com.jgoodies
看
2.0.4
org.springframework.richclient
SpringRichClient支持
0.2.1

终于解决了这个问题。毕竟很简单。因此,它在UNIX(Red Hat Enterprise Linux 5)上失败的原因是因为这台机器上没有图形界面!没有侏儒,没有KDE或任何东西。因此,它在尝试配置应用程序GUI的外观时失败了。事后看来,我应该提到我使用TeamCity来运行这些测试,而且我从来没有在RHEL5服务器前进行过实际操作

解决方案是创建一个新的TeamCity构建,它只运行GUI测试,并在Windows机器上执行此操作


所以这个故事的寓意是,如果在远程机器上运行GUI测试,请确保它有图形支持

看起来jgoodies looks库不在类路径中。但是如果它作为maven依赖项添加,它肯定会自动添加到类路径中吗?如何确认/解决此问题?哦,对不起。我误解了这个问题,以为你是在运行时得到的,而不是在执行单元测试时得到的。我能看到的Windows和Unix之间的唯一区别是Unix是区分大小写的。所以仔细检查你的类路径。我该怎么做呢?我可以在unix服务器上回显$CLASSPATH,它显示为一个空行,然后在windows中执行相同的操作:。;然后是一些我认为不相关的IBM JAR。RHEL服务器上的java.awt.headless是否设置为true?假设不是这样,您可能会得到一条更有意义的错误消息。在没有gui的服务器中,应该将其设置为true。如果是的话,这是一个jgoodies不检查的问题,但我认为他们会检查它。
<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>