Почему имя пакета не может быть проанализировано в банке? - PullRequest
2 голосов
/ 13 июля 2010

Я работаю в интегрированном Spring-приложении Eclipse RCP, но при инициализации Spring Framework при запуске приложения возникла ошибка.

Мой код в 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

Имя моего пакета formicary-remote.jar начинается с 'net.interttimes.', Поэтому я не понимаю, почему имя пакета не может быть проанализировано?

Спасибо за внимание к моему вопросу!

Ответы [ 3 ]

2 голосов
/ 13 июля 2010

Спасибо всем вам!

Моя проблема решена.Это потому, что я использовал eclipse для экспорта jar и не проверял опцию «Добавить записи каталога».Это работает после того, как я проверю эту опцию.^ _ ^

0 голосов
/ 13 июля 2010

Загляните внутрь файла jar (который на самом деле является zip-файлом, как мы все знаем), Spring ожидает путь

/net/interttimes/

внутри.Иногда во время работы с классами мы случайно добавляем в корзину папку bin и получаем что-то вроде

/bin/net/interttimes/

(это будет моей самой распространенной ошибкой ..)

0 голосов
/ 13 июля 2010

Я думаю, что это может быть связано с тем фактом, что JAR-файлы (которые в основном являются ZIP-файлами) имеют запись для каждого файла, и путь к этому файлу хранится в его записи, и не должно быть записи для какого-либокаталогов в пути к этому файлу (хотя это разрешено).

Вы можете проверить файлы в вашем JAR, используя

jar -tf <jar_file>

Если вы не видите отдельной строки для каталогавы ищете, это может объяснить, почему вы получаете FileNotFoundException.

Например, для записи:

a/b/c.txt

Каталоги 'a' и 'b' не обязательно имеют своисобственные записи в JAR (если вы не добавите их отдельно).

Вы бы увидели что-то вроде этого, если так:

a
a/b
a/b/c.txt
...