Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/eclipse/8.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中解析包名?_Java_Eclipse_Spring_Eclipse Rcp - Fatal编程技术网

Java 为什么不能在jar中解析包名?

Java 为什么不能在jar中解析包名?,java,eclipse,spring,eclipse-rcp,Java,Eclipse,Spring,Eclipse Rcp,我正在使用spring集成的EclipseRCP应用程序,但在应用程序启动时spring框架初始化时出错 下面是我在Activator.java中的代码: ... public void start(BundleContext context) throws Exception { super.start(context); initializeApplicationContext(); plugin = this; }

我正在使用spring集成的EclipseRCP应用程序,但在应用程序启动时spring框架初始化时出错

下面是我在Activator.java中的代码:

...
    public void start(BundleContext context) throws Exception {
        super.start(context);

        initializeApplicationContext();

        plugin = this;
    }

    private void initializeApplicationContext() {
        ClassLoader oldLoader = Thread.currentThread().getContextClassLoader();
        try {
            Thread.currentThread().setContextClassLoader(
                    this.getClass().getClassLoader());
            ctx = new ClassPathXmlApplicationContext(SPRING_CONFIGS);
        }catch(Exception e){
            e.printStackTrace();
        } finally {
            Thread.currentThread().setContextClassLoader(oldLoader);
        }
    }
...
例外情况是:

2010-07-13 16:38:42,421 INFO  [AbstractApplicationContext] - Refreshing org.springframework.context.support.ClassPathXmlApplicationContext@be76c7: display name [org.springframework.context.support.ClassPathXmlApplicationContext@be76c7]; startup date [Tue Jul 13 16:38:42 CST 2010]; root of context hierarchy
2010-07-13 16:38:42,656 INFO  [XmlBeanDefinitionReader] - Loading XML bean definitions from class path resource [applicationContext.xml]
org.springframework.beans.factory.BeanDefinitionStoreException: I/O failure during classpath scanning; nested exception is java.io.FileNotFoundException: JAR entry net/interttimes/ not found in D:\Workspaces\MyEclipse 8.x\formicary-client2\lib\formicary-remote.jar
    at org.springframework.context.annotation.ClassPathScanningCandidateComponentProvider.findCandidateComponents(ClassPathScanningCandidateComponentProvider.java:222)
    at org.springframework.context.annotation.ClassPathBeanDefinitionScanner.doScan(ClassPathBeanDefinitionScanner.java:201)
    at org.springframework.context.annotation.ComponentScanBeanDefinitionParser.parse(ComponentScanBeanDefinitionParser.java:84)
    at org.springframework.beans.factory.xml.NamespaceHandlerSupport.parse(NamespaceHandlerSupport.java:69)
    at org.springframework.beans.factory.xml.BeanDefinitionParserDelegate.parseCustomElement(BeanDefinitionParserDelegate.java:1297)
    at org.springframework.beans.factory.xml.BeanDefinitionParserDelegate.parseCustomElement(BeanDefinitionParserDelegate.java:1287)
    at org.springframework.beans.factory.xml.DefaultBeanDefinitionDocumentReader.parseBeanDefinitions(DefaultBeanDefinitionDocumentReader.java:135)
    at org.springframework.beans.factory.xml.DefaultBeanDefinitionDocumentReader.registerBeanDefinitions(DefaultBeanDefinitionDocumentReader.java:92)
    at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.registerBeanDefinitions(XmlBeanDefinitionReader.java:507)
    at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.doLoadBeanDefinitions(XmlBeanDefinitionReader.java:398)
    at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:342)
    at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:310)
    at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:143)
    at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:178)
    at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:149)
    at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:212)
    at org.springframework.context.support.AbstractXmlApplicationContext.loadBeanDefinitions(AbstractXmlApplicationContext.java:113)
    at org.springframework.context.support.AbstractXmlApplicationContext.loadBeanDefinitions(AbstractXmlApplicationContext.java:80)
    at org.springframework.context.support.AbstractRefreshableApplicationContext.refreshBeanFactory(AbstractRefreshableApplicationContext.java:123)
    at org.springframework.context.support.AbstractApplicationContext.obtainFreshBeanFactory(AbstractApplicationContext.java:422)
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:352)
    at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:139)
    at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:93)
    at net.interttimes.formicary.rcp.Activator.initializeApplicationContext(Activator.java:62)
    at net.interttimes.formicary.rcp.Activator.start(Activator.java:47)
    ...
Caused by: java.io.FileNotFoundException: JAR entry net/interttimes/ not found in D:\Workspaces\MyEclipse 8.x\formicary-client2\lib\formicary-remote.jar
    at sun.net.www.protocol.jar.JarURLConnection.connect(JarURLConnection.java:122)
    at sun.net.www.protocol.jar.JarURLConnection.getJarFile(JarURLConnection.java:71)
    ... 65 more
2010-07-13 16:38:42421信息[AbstractApplicationContext]-刷新org.springframework.context.support。ClassPathXmlApplicationContext@be76c7:显示名称[org.springframework.context.support]。ClassPathXmlApplicationContext@be76c7]; 启动日期【2010年7月13日星期二16:38:42 CST】;上下文层次结构的根
2010-07-13 16:38:42656信息[XmlBeanDefinitionReader]-从类路径资源[applicationContext.XML]加载XMLBean定义
org.springframework.beans.factory.BeanDefinitionStoreException:类路径扫描期间I/O失败;嵌套异常为java.io.FileNotFoundException:JAR条目net/intertimes/未在D:\Workspaces\MyEclipse 8.x\formicary-client2\lib\formicary-remote.JAR中找到
位于org.springframework.context.annotation.ClassPathScanningCandidateComponentProvider.findCandidateComponents(ClassPathScanningCandidateComponentProvider.java:222)
位于org.springframework.context.annotation.ClassPathBeanDefinitionScanner.doScan(ClassPathBeanDefinitionScanner.java:201)
位于org.springframework.context.annotation.ComponentScanBeanDefinitionParser.parse(ComponentScanBeanDefinitionParser.java:84)
位于org.springframework.beans.factory.xml.NamespaceHandlerSupport.parse(NamespaceHandlerSupport.java:69)
位于org.springframework.beans.factory.xml.BeanDefinitionParserDelegate.parseCustomElement(BeanDefinitionParserDelegate.java:1297)
位于org.springframework.beans.factory.xml.BeanDefinitionParserDelegate.parseCustomElement(BeanDefinitionParserDelegate.java:1287)
位于org.springframework.beans.factory.xml.DefaultBeanDefinitionDocumentReader.parseBeanDefinitions(DefaultBeanDefinitionDocumentReader.java:135)
位于org.springframework.beans.factory.xml.DefaultBeanDefinitionDocumentReader.registerBeanDefinitions(DefaultBeanDefinitionDocumentReader.java:92)
位于org.springframework.beans.factory.xml.XmlBeanDefinitionReader.registerBeanDefinitions(XmlBeanDefinitionReader.java:507)
位于org.springframework.beans.factory.xml.XmlBeanDefinitionReader.doLoadBeanDefinitions(XmlBeanDefinitionReader.java:398)
位于org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:342)
位于org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:310)
位于org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:143)
位于org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:178)
位于org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:149)
位于org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:212)
位于org.springframework.context.support.AbstractXmlApplicationContext.loadBeanDefinitions(AbstractXmlApplicationContext.java:113)
位于org.springframework.context.support.AbstractXmlApplicationContext.loadBeanDefinitions(AbstractXmlApplicationContext.java:80)
位于org.springframework.context.support.AbstractRefreshableApplicationContext.refreshBeanFactory(AbstractRefreshableApplicationContext.java:123)
位于org.springframework.context.support.AbstractApplicationContext.GettainFreshBeanFactory(AbstractApplicationContext.java:422)
位于org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:352)
位于org.springframework.context.support.ClassPathXmlApplicationContext。(ClassPathXmlApplicationContext.java:139)
位于org.springframework.context.support.ClassPathXmlApplicationContext。(ClassPathXmlApplicationContext.java:93)
在net.intertimes.formicary.rcp.Activator.initializeApplicationContext(Activator.java:62)中
at net.intertimes.formicary.rcp.Activator.start(Activator.java:47)
...
原因:java.io.FileNotFoundException:JAR entry net/intertimes/未在D:\workspace\MyEclipse 8.x\formicary-client2\lib\formicary-remote.JAR中找到
位于sun.net.www.protocol.jar.JarURLConnection.connect(JarURLConnection.java:122)
位于sun.net.www.protocol.jar.JarURLConnection.getJarFile(JarURLConnection.java:71)
... 65多
我的formicary remote.jar的包名以“net.intertimes”开头,所以我不明白,为什么包名不能被解析


谢谢你关注我的问题

我认为这可能是因为JAR文件(基本上是ZIP文件)每个文件都有一个条目,该文件的路径存储在其条目中,并且该文件路径中的任何目录都不必有条目(尽管这是允许的)

您可以使用

jar -tf <jar_file>
目录“a”和“b”在JAR中不一定有它们自己的条目(除非您单独添加它们)

你会看到这样的情况,如果是这样的话:

a
a/b
a/b/c.txt

查看一下jar文件(我们都知道它实际上是一个zip),spring需要一个路径

/net/interttimes/
里面。有时,在jar'ing类时,我们意外地将bin文件夹添加到jar中,并有如下内容

/bin/net/interttimes/
(这是我最常犯的错误。)

谢谢大家


我的问题解决了。这是因为我使用eclipse导出jar,并且没有选中“添加目录条目”选项。我选中此选项后,它就可以工作了^_^

谢谢大家!!我使用“jar-tf”检查了我的jar文件,输出:META-INF/MANIFEST.MF net/intertimes/formicary/remote/IRegistHessianService.class。。。
/bin/net/interttimes/