可以使用Java Web Start(javaws)远程执行桌面客户端应用程序(Java 8,Swing,Spring Framework)。这在Oracle javaws上很好用。
当尝试在Ubuntu(Bionic&Xenial)上使用IcedTea Web Start进行此操作时,我得到了数十个ClassNotFoundExceptions。有些是我们自己项目中的其他类,也可能是JDK中的类,或者仅仅是资源文件。但是大多数提到的类名都以 ... BeanInfo 或 ... Customizer 结尾。这些在我们的项目中不存在。
java.beans.Introspector::findCustomizerClass
添加此“ Customizer”后缀,com.sun.beans.finder.BeanInfoFinder
的构造函数将“ BeanInfo”作为后缀传递给其父类com.sun.beans.finder.InstanceFinder
,后者将其添加到其{{{ 1}}方法。自然,这些类在我的JAR中不存在,也不会找到。没有后缀,将找到类。
这是怎么回事?当使用IcedTea Web Start运行应用程序时,为什么要添加这些后缀?这是必需的还是可以禁用的?
以下是一些ClassNotFoundExceptions列表(出于各种原因,我们自己的类名已被删除):
find()
这是ClassNotFoundException的完整堆栈跟踪。可以在没有 BeanInfo 后缀的情况下找到相关的类。
java.lang.ClassNotFoundException: org.apache.log4j.PatternLayoutBeanInfo
java.lang.ClassNotFoundException: org.apache.log4j.PatternLayoutBeanInfo
java.lang.ClassNotFoundException: org.apache.log4j.LayoutBeanInfo
java.lang.ClassNotFoundException: org.apache.log4j.LayoutBeanInfo
java.lang.ClassNotFoundException: java.lang.ObjectBeanInfo
java.lang.ClassNotFoundException: java.lang.ObjectCustomizer
java.lang.ClassNotFoundException: org.apache.log4j.LayoutCustomizer
java.lang.ClassNotFoundException: org.apache.log4j.LayoutCustomizer
java.lang.ClassNotFoundException: org.apache.log4j.PatternLayoutCustomizer
java.lang.ClassNotFoundException: org.apache.log4j.PatternLayoutCustomizer
java.lang.ClassNotFoundException: org.apache.log4j.RollingFileAppenderBeanInfo
java.lang.ClassNotFoundException: org.apache.log4j.RollingFileAppenderBeanInfo
java.lang.ClassNotFoundException: org.apache.log4j.FileAppenderBeanInfo
java.lang.ClassNotFoundException: org.apache.log4j.FileAppenderBeanInfo
java.lang.ClassNotFoundException: org.apache.log4j.WriterAppenderBeanInfo
java.lang.ClassNotFoundException: org.apache.log4j.WriterAppenderBeanInfo
java.lang.ClassNotFoundException: org.apache.log4j.AppenderSkeletonBeanInfo
java.lang.ClassNotFoundException: org.apache.log4j.AppenderSkeletonBeanInfo
java.lang.ClassNotFoundException: org.apache.log4j.AppenderSkeletonCustomizer
java.lang.ClassNotFoundException: org.apache.log4j.AppenderSkeletonCustomizer
java.lang.ClassNotFoundException: org.apache.log4j.WriterAppenderCustomizer
java.lang.ClassNotFoundException: org.apache.log4j.WriterAppenderCustomizer
java.lang.ClassNotFoundException: org.apache.log4j.FileAppenderCustomizer
java.lang.ClassNotFoundException: org.apache.log4j.FileAppenderCustomizer
java.lang.ClassNotFoundException: org.apache.log4j.RollingFileAppenderCustomizer
java.lang.ClassNotFoundException: org.apache.log4j.RollingFileAppenderCustomizer
java.lang.ClassNotFoundException: [redacted resource filename]
java.lang.ClassNotFoundException: [redacted resource filename]_en
java.lang.ClassNotFoundException: [redacted resource filename]_en_US
java.lang.ClassNotFoundException: org.eclipse.core.runtime.FileLocator
java.lang.ClassNotFoundException: org.eclipse.core.runtime$FileLocator
java.lang.ClassNotFoundException: javax.inject.Provider
java.lang.ClassNotFoundException: javax.inject$Provider
java.lang.ClassNotFoundException: [redacted]
java.lang.ClassNotFoundException: [redacted]..._en
java.lang.ClassNotFoundException: [redacted]..._en_US
java.lang.ClassNotFoundException: [redacted resource filename]
java.lang.ClassNotFoundException: [redacted resource filename]_en
java.lang.ClassNotFoundException: [redacted resource filename]_en_US
java.lang.ClassNotFoundException: org.springframework.beans.factory.config.PropertyPlaceholderConfigurerBeanInfo
java.lang.ClassNotFoundException: org.springframework.beans.factory.config.PropertyPlaceholderConfigurerBeanInfo
java.lang.ClassNotFoundException: org.springframework.beans.factory.config.PlaceholderConfigurerSupportBeanInfo
java.lang.ClassNotFoundException: org.springframework.beans.factory.config.PlaceholderConfigurerSupportBeanInfo
java.lang.ClassNotFoundException: org.springframework.beans.factory.config.PropertyResourceConfigurerBeanInfo
java.lang.ClassNotFoundException: org.springframework.beans.factory.config.PropertyResourceConfigurerBeanInfo
java.lang.ClassNotFoundException: org.springframework.core.io.support.PropertiesLoaderSupportBeanInfo
java.lang.ClassNotFoundException: org.springframework.core.io.support.PropertiesLoaderSupportBeanInfo
java.lang.ClassNotFoundException: org.springframework.core.io.support.PropertiesLoaderSupportCustomizer
java.lang.ClassNotFoundException: org.springframework.core.io.support.PropertiesLoaderSupportCustomizer
java.lang.ClassNotFoundException: org.springframework.beans.factory.config.PropertyResourceConfigurerCustomizer
java.lang.ClassNotFoundException: org.springframework.beans.factory.config.PropertyResourceConfigurerCustomizer
java.lang.ClassNotFoundException: org.springframework.beans.factory.config.PlaceholderConfigurerSupportCustomizer
java.lang.ClassNotFoundException: org.springframework.beans.factory.config.PlaceholderConfigurerSupportCustomizer
java.lang.ClassNotFoundException: org.springframework.beans.factory.config.PropertyPlaceholderConfigurerCustomizer
java.lang.ClassNotFoundException: org.springframework.beans.factory.config.PropertyPlaceholderConfigurerCustomizer
java.lang.ClassNotFoundException: org.springframework.beans.factory.config.CustomEditorConfigurerBeanInfo
java.lang.ClassNotFoundException: org.springframework.beans.factory.config.CustomEditorConfigurerBeanInfo
java.lang.ClassNotFoundException: org.springframework.beans.factory.config.CustomEditorConfigurerCustomizer
java.lang.ClassNotFoundException: org.springframework.beans.factory.config.CustomEditorConfigurerCustomizer
java.lang.ClassNotFoundException: org.springframework.context.support.ResourceBundleMessageSourceBeanInfo
java.lang.ClassNotFoundException: org.springframework.context.support.ResourceBundleMessageSourceBeanInfo
java.lang.ClassNotFoundException: org.springframework.context.support.AbstractMessageSourceBeanInfo
java.lang.ClassNotFoundException: org.springframework.context.support.AbstractMessageSourceBeanInfo
java.lang.ClassNotFoundException: org.springframework.context.support.MessageSourceSupportBeanInfo
java.lang.ClassNotFoundException: org.springframework.context.support.MessageSourceSupportBeanInfo
java.lang.ClassNotFoundException: org.springframework.context.support.MessageSourceSupportCustomizer
java.lang.ClassNotFoundException: org.springframework.context.support.MessageSourceSupportCustomizer
java.lang.ClassNotFoundException: org.springframework.context.support.AbstractMessageSourceCustomizer
java.lang.ClassNotFoundException: org.springframework.context.support.AbstractMessageSourceCustomizer
java.lang.ClassNotFoundException: org.springframework.context.support.ResourceBundleMessageSourceCustomizer
java.lang.ClassNotFoundException: org.springframework.context.support.ResourceBundleMessageSourceCustomizer
java.lang.ClassNotFoundException: [redacted resource filename]_
java.lang.ClassNotFoundException: [redacted resource filename]_en
java.lang.ClassNotFoundException: [redacted resource filename]_en_US
java.lang.ClassNotFoundException: [redacted]...BeanInfo
java.lang.ClassNotFoundException: [redacted]...BeanInfo
java.lang.ClassNotFoundException: [redacted]...Customizer
java.lang.ClassNotFoundException: [redacted]...Customizer
java.lang.ClassNotFoundException: [redacted]...BeanInfo
java.lang.ClassNotFoundException: [redacted]...BeanInfo
java.lang.ClassNotFoundException: [redacted]...Customizer
java.lang.ClassNotFoundException: [redacted]...Customizer
java.lang.ClassNotFoundException: [redacted]...BeanInfo
java.lang.ClassNotFoundException: [redacted]...BeanInfo
java.lang.ClassNotFoundException: java.beans.PropertyEditorSupportBeanInfo
java.lang.ClassNotFoundException: java.beans.PropertyEditorSupportCustomizer
java.lang.ClassNotFoundException: [redacted]...Customizer
java.lang.ClassNotFoundException: [redacted]...Customizer
java.lang.ClassNotFoundException: [redacted]...BeanInfo
java.lang.ClassNotFoundException: [redacted]...BeanInfo
java.lang.ClassNotFoundException: [redacted]...BeanInfo
java.lang.ClassNotFoundException: [redacted]...BeanInfo
java.lang.ClassNotFoundException: [redacted]...Customizer
java.lang.ClassNotFoundException: [redacted]...Customizer
java.lang.ClassNotFoundException: [redacted]...Customizer
java.lang.ClassNotFoundException: [redacted]...Customizer
java.lang.ClassNotFoundException: [redacted]...BeanInfo
java.lang.ClassNotFoundException: [redacted]...BeanInfo
java.lang.ClassNotFoundException: [redacted]...Customizer
java.lang.ClassNotFoundException: [redacted]...Customizer
java.lang.ClassNotFoundException: [redacted]
java.lang.ClassNotFoundException: [redacted]...BeanInfo
java.lang.ClassNotFoundException: [redacted]...BeanInfo
java.lang.ClassNotFoundException: [redacted]...Customizer
java.lang.ClassNotFoundException: [redacted]...Customizer
java.lang.ClassNotFoundException: [redacted]...BeanInfo
java.lang.ClassNotFoundException: [redacted]...BeanInfo
java.lang.ClassNotFoundException: [redacted]...Customizer
java.lang.ClassNotFoundException: [redacted]...Customizer
java.lang.ClassNotFoundException: [redacted]...BeanInfo
java.lang.ClassNotFoundException: [redacted]...BeanInfo
java.lang.ClassNotFoundException: [redacted]...Customizer
java.lang.ClassNotFoundException: [redacted]...Customizer
java.lang.ClassNotFoundException: [redacted]...BeanInfo
java.lang.ClassNotFoundException: [redacted]...BeanInfo
未找到ComponentUI类。我们使用自定义外观。
java.lang.ClassNotFoundException: [redacted class path].EnableOnSelectDependencyBeanInfo
at net.sourceforge.jnlp.runtime.JNLPClassLoader.loadClassExt(JNLPClassLoader.java:1721)
at net.sourceforge.jnlp.runtime.JNLPClassLoader.loadClass(JNLPClassLoader.java:1519)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:348)
at com.sun.beans.finder.ClassFinder.findClass(ClassFinder.java:67)
at com.sun.beans.finder.ClassFinder.findClass(ClassFinder.java:110)
at com.sun.beans.finder.InstanceFinder.instantiate(InstanceFinder.java:93)
at com.sun.beans.finder.InstanceFinder.find(InstanceFinder.java:66)
at java.beans.Introspector.findExplicitBeanInfo(Introspector.java:448)
at java.beans.Introspector.<init>(Introspector.java:398)
at java.beans.Introspector.getBeanInfo(Introspector.java:173)
at org.springframework.beans.CachedIntrospectionResults.<init>(CachedIntrospectionResults.java:279)
at org.springframework.beans.CachedIntrospectionResults.forClass(CachedIntrospectionResults.java:189)
at org.springframework.beans.BeanWrapperImpl.getCachedIntrospectionResults(BeanWrapperImpl.java:177)
at org.springframework.beans.BeanWrapperImpl.getLocalPropertyHandler(BeanWrapperImpl.java:214)
at org.springframework.beans.BeanWrapperImpl.getLocalPropertyHandler(BeanWrapperImpl.java:63)
at org.springframework.beans.AbstractNestablePropertyAccessor.getPropertyHandler(AbstractNestablePropertyAccessor.java:725)
at org.springframework.beans.AbstractNestablePropertyAccessor.isWritableProperty(AbstractNestablePropertyAccessor.java:557)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1483)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1226)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:543)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:482)
at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveInnerBean(BeanDefinitionValueResolver.java:299)
at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveValueIfNecessary(BeanDefinitionValueResolver.java:122)
at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveManagedMap(BeanDefinitionValueResolver.java:407)
at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveValueIfNecessary(BeanDefinitionValueResolver.java:165)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1481)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1226)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:543)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:482)
at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveInnerBean(BeanDefinitionValueResolver.java:299)
at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveValueIfNecessary(BeanDefinitionValueResolver.java:122)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1481)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1226)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:543)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:482)
at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:306)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:302)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:197)
at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:351)
at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveValueIfNecessary(BeanDefinitionValueResolver.java:108)
at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveManagedList(BeanDefinitionValueResolver.java:382)
at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveValueIfNecessary(BeanDefinitionValueResolver.java:157)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1481)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1226)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:543)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:482)
at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:306)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:302)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:197)
at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:351)
at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveValueIfNecessary(BeanDefinitionValueResolver.java:108)
at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveManagedList(BeanDefinitionValueResolver.java:382)
at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveValueIfNecessary(BeanDefinitionValueResolver.java:157)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1481)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1226)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:543)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:482)
at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:306)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:302)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:197)
at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1054)
at [redacted class path].SpringContextFileHandler.getBean(SpringContextFileHandler.java:157)
at [redacted class path].AbstractSpringContextHandler.getDescriptor(AbstractSpringContextHandler.java:149)
at [redacted class path].SpringContextFileHandler.initTree(SpringContextFileHandler.java:131)
at [redacted class path].SpringContextFileHandler.doInitialize(SpringContextFileHandler.java:104)
at [redacted class path].util.SpringContextWrapper.initContext(SpringContextWrapper.java:48)
at [redacted class path].RedactedMainClass.lambda$static$0(RedactedMainClass.java:127)
at java.lang.Thread.run(Thread.java:748)
使用Oracle Web Start启动应用程序时,所有这些都不会发生。 IcedTea Web Start有什么不同?怎么解决?