2010-07-13 4 views
2

Je travaille sur une application Eclipse RCP à ressort, mais j'ai rencontré une erreur lors de l'initialisation de la structure Spring au démarrage de l'application.Pourquoi le nom du package ne peut-il pas être analysé dans le fichier jar?

Mon code Activator.java ci-dessous:

... 
    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); 
     } 
    } 
... 

L'exception est:

2010-07-13 16:38:42,421 INFO [AbstractApplicationContext] - Refreshing org[email protected]be76c7: display name [org[email protected]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 

Nom du package de mon fourmilière-remote.jar est commencer, donc je net.interttimes. ' ne comprends pas, pourquoi le nom du paquet ne peut pas être analysé?

Merci de votre attention pour ma question!

Répondre

0

Je pense que cela peut être dû au fait que les fichiers JAR (qui sont essentiellement des fichiers ZIP) ont une entrée par fichier et le chemin de ce fichier est stocké dans son entrée et il ne doit pas y avoir d'entrée pour l'un des répertoires dans le chemin de ce fichier (bien que cela soit autorisé).

Vous pouvez vérifier les fichiers dans votre JAR à l'aide

jar -tf <jar_file> 

Si vous ne voyez pas une ligne distincte vous recherchez le répertoire, qui peut expliquer pourquoi vous obtenez un FileNotFoundException.

Par exemple, pour une entrée:

a/b/c.txt 

Les répertoires a 'et « b » ne sont pas nécessairement leurs propres entrées dans le JAR (sauf si vous les ajoutez séparément).

Vous verriez quelque chose comme ça, si oui:

a 
a/b 
a/b/c.txt 
+0

merci! J'ai vérifié mon fichier jar en utilisant 'jar -tf', sortie: META-INF/MANIFEST.MF net/interttimes/formicary/à distance/IRegistHessianService.class ... – newton

0

Jetez un oeil à l'intérieur du fichier jar (qui est en fait un zip comme nous le savons tous), le printemps attend un chemin

/net/interttimes/ 

à l'intérieur. Parfois, tout en jar'ing les classes nous ajoutons par mégarde le dossier bin dans le pot et avoir quelque chose comme

/bin/net/interttimes/ 

(c'est serait mon erreur la plus commune ..)

2

Merci à vous tous!

Mon problème a été résolu. C'est parce que j'ai utilisé eclipse pour exporter le fichier jar et que je n'ai pas coché l'option 'Add directory entries'. Cela fonctionne après que j'ai vérifié cette option.^_^

Questions connexes