Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/335.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 创建可双击的';优步';jar,它可以拉入spring应用程序的其他jar_Java_Spring_Exception_Maven 2 - Fatal编程技术网

Java 创建可双击的';优步';jar,它可以拉入spring应用程序的其他jar

Java 创建可双击的';优步';jar,它可以拉入spring应用程序的其他jar,java,spring,exception,maven-2,Java,Spring,Exception,Maven 2,我有一个在tomcat中运行的mavenized、基于spring的多模块(3.0.1)应用程序。我正在尝试创建一个独立的工具,我可以通过一个jar分发给用户(这样他们就可以双击它),它捆绑在上面提到的应用程序的一些模块中 我已经使用maven shade插件来组装这个罐子。如果我分解jar,它看起来好像所有依赖项都在那里,并且两个spring元数据文件已经从所有单独的spring jar中正确地连接起来。应用程序一直运行,直到我尝试实例化ClassPathXmlApplicationConte

我有一个在tomcat中运行的mavenized、基于spring的多模块(3.0.1)应用程序。我正在尝试创建一个独立的工具,我可以通过一个jar分发给用户(这样他们就可以双击它),它捆绑在上面提到的应用程序的一些模块中

我已经使用maven shade插件来组装这个罐子。如果我分解jar,它看起来好像所有依赖项都在那里,并且两个spring元数据文件已经从所有单独的spring jar中正确地连接起来。应用程序一直运行,直到我尝试实例化
ClassPathXmlApplicationContext
。当用户单击应用程序中的按钮时,将执行以下方法:

public void createAppContext() {
   ClassPathXmlApplicationContext context = 
       new ClassPathXmlApplicationContext(springFiles);
}
“springFiles”在类中声明如下:

public final String[] springFiles = { "/applicationContext-beans.xml" };
执行上述方法时,出现以下错误:

Exception in thread "Thread-8" java.lang.ArrayIndexOutOfBoundsException: 3350 at org.springframework.asm.ClassReader.(Unknown Source) at org.springframework.asm.ClassReader.(Unknown Source) at org.springframework.asm.ClassReader.(Unknown Source) at org.springframework.core.type.classreading.SimpleMetadataReader.(SimpleMetadataReader.java:48) at org.springframework.core.type.classreading.SimpleMetadataReaderFactory.getMetadataReader(SimpleMetadataReaderFactory.java:80) at org.springframework.core.type.classreading.CachingMetadataReaderFactory.getMetadataReader(CachingMetadataReaderFactory.java:82) at org.springframework.core.type.classreading.SimpleMetadataReaderFactory.getMetadataReader(SimpleMetadataReaderFactory.java:76) at org.springframework.context.annotation.ConfigurationClassBeanDefinitionReader.checkConfigurationClassCandidate(ConfigurationClassBeanDefinitionReader.java:302) at org.springframework.context.annotation.ConfigurationClassPostProcessor.processConfigBeanDefinitions(ConfigurationClassPostProcessor.java:157) at org.springframework.context.annotation.ConfigurationClassPostProcessor.postProcessBeanDefinitionRegistry(ConfigurationClassPostProcessor.java:132) at org.springframework.context.support.AbstractApplicationContext.invokeBeanFactoryPostProcessors(AbstractApplicationContext.java:584) at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:405) at org.springframework.context.support.ClassPathXmlApplicationContext.(ClassPathXmlApplicationContext.java:139) at org.springframework.context.support.ClassPathXmlApplicationContext.(ClassPathXmlApplicationContext.java:93) at com.mycompany.StandaloneTool$2.run(StandaloneTool.java:124) 线程“thread-8”java.lang.ArrayIndexOutOfBoundsException中的异常:3350 位于org.springframework.asm.ClassReader。(未知来源) 位于org.springframework.asm.ClassReader。(未知来源) 位于org.springframework.asm.ClassReader。(未知来源) 位于org.springframework.core.type.classreading.SimpleMetadataReader。(SimpleMetadataReader.java:48) 位于org.springframework.core.type.classreading.SimpleMetadataReaderFactory.getMetadataReader(SimpleMetadataReaderFactory.java:80) 位于org.springframework.core.type.classreading.CachingMetadataReaderFactory.getMetadataReader(CachingMetadataReaderFactory.java:82) 位于org.springframework.core.type.classreading.SimpleMetadataReaderFactory.getMetadataReader(SimpleMetadataReaderFactory.java:76) 位于org.springframework.context.annotation.ConfigurationClassBeanDefinitionReader.checkConfigurationClassCandidate(ConfigurationClassBeanDefinitionReader.java:302) 位于org.springframework.context.annotation.ConfigurationClassPostProcessor.processConfigBeanDefinitions(ConfigurationClassPostProcessor.java:157) 位于org.springframework.context.annotation.ConfigurationClassPostProcessor.postProcessBeanDefinitionRegistry(ConfigurationClassPostProcessor.java:132) 位于org.springframework.context.support.AbstractApplicationContext.invokeBeanFactoryPostProcessors(AbstractApplicationContext.java:584) 位于org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:405) 位于org.springframework.context.support.ClassPathXmlApplicationContext。(ClassPathXmlApplicationContext.java:139) 位于org.springframework.context.support.ClassPathXmlApplicationContext。(ClassPathXmlApplicationContext.java:93) 在com.mycompany.StandaloneTool$2.run(StandaloneTool.java:124)
任何帮助都将不胜感激

这只是一种预感,但可能是shade插件覆盖了Spring在配置文件中用于其名称空间的元数据。查看shade插件的文档,看看它是否解决了您的问题。

spring元数据文件似乎复制正确。我开始使用maven shade插件的原因如下:

我将spring日志升级为TRACE,这显示了更多信息(我应该这样做才能开始,哎呀!)。我收到了一堆异常,说各种.class文件都有无效的java幻数

事实证明,问题在于我是如何使用maven依赖插件的。我的意图是在生成资源阶段拉入一个.zip工件,解压缩它,并将其内容复制到一个特定的构建目录。一个潜在的问题是,我无意中使用了“解包依赖项”这一目标,它引入了比我预期的更多的依赖项(最终maven shade插件将捆绑的依赖项)。然而,似乎最终解决了这个问题的是删除了工件项属性“output directory”,其中我指定了一个名为“generated resources”的目录。一旦我搬走了这个房子,一切都很顺利

我不清楚为什么.class文件上的神奇数字被更改/损坏,但至少问题已经解决了。有人知道到底发生了什么吗


感谢所有的投入

您加载的bean中有没有试图通过注释加载其他上下文。更具体地说,是.xsd文件