2010-06-16 8 views
9

Je reçois une erreur de ligne trop longue en essayant de construire un pot. la ligne longue dans le fichier manifeste est la ligne Class-Path car l'application utilise un grand nombre de bibliothèques tierces. Inutile de dire que j'utilise Windows :-(et Eclipse Java 1.6Trop longue ligne dans le fichier manifeste en essayant de créer un pot

J'ai essayé Class-Path: lib ou Class-Path: lib/ mais ils ne travaillaient pas.

Répondre

29

Le classpath est trop long en raison du nombre de fichiers jar en elle. « aucune ligne peut être plus de 72 octets (non caractères), sous sa forme codée UTF8 ».. [de docs: java 5, java 8,«longueur de la ligne»section]

utilisation comme la manière suivante pour résoudre le problème:

(1) utiliser des lignes séparées, pour éviter une ligne trop longue pour java packa nom ge liste

(2) tapez un espace précédent avant chaque ligne folloing, par exemple:

Class-Path: 
...jar 
...jar 
...jar 
+3

parfait ... un espace à la fin de chaque ligne et un au début. Merci un million – fadmaa

+1

@fadmaa, seulement au début. –

-7

Pendant trop longtemps, l'erreur de ligne

Utiliser Class-Path: *.*

6

La réponse de Voodoochild m'a mis sur la bonne voie mais n'était pas si clair pour moi en citant les spécifications:

No line may be longer than 72 bytes (not characters), in its UTF8-encoded form. If a value would make the initial line longer than this, it should be continued on extra lines (each starting with a single SPACE).

exemple Manifest:

Manifest-Version: 1.0 
Main-Class: com.mypackage.MyApp 
Class-path: commons-beanutils-1.7.0.jar commons-collections-3.1.jar 
commons-dbcp-1.2.2.jar commons-discovery.jar commons-lang-2.1.jar 
commons-pool-1.2.jar ezjcom18.jar jbcl.jar log4j-1.2.14.jar 
sqljdbc.jar torque-3.2-rc2.jar 
+0

En outre, si le nom du fichier jar dépasse 72 octets et continue sur la ligne suivante, il ne doit pas avoir cet espace unique supplémentaire (j'ai modifié votre échantillon pour inclure un tel scénario). – Malvon

4

Le caractère unique ne fonctionne pas pour moi (Java 8, IntelliJ). J'ai utilisé deux caractères au début et aucun caractère à la fin de la ligne (n'était pas apparent à partir de l'exemple ci-dessus) et deux nouvelles lignes à la fin, par ex.

Manifest-Version: 1.0 
Main-Class: com.mypackage.MyApp 
Implementation-Version: 2.0.0 
Class-Path: newLibs/asjava.zip 
    newLibs/activation.jar 
    newLibs/axis-ant.jar 
    newLibs/axis.jar 
    newLibs/bcel-5.1.jar 
    newLibs/commons-discovery-0.2.jar 
    newLibs/commons-logging-1.0.4.jar 
    newLibs/datanucleus-api-jdo-4.2.0-release.jar 
    newLibs/datanucleus-api-jpa-4.1.4.jar 
    newLibs/datanucleus-cache-4.0.4.jar 
    newLibs/datanucleus-core-4.1.5.jar 
    newLibs/datanucleus-geospatial-4.1.0-release.jar 
    newLibs/datanucleus-guava-4.1.3.jar 
    newLibs/datanucleus-java8-4.2.0-release.jar 
    newLibs/datanucleus-jdo-query-4.2.0-release.jar 
    newLibs/datanucleus-jodatime-4.1.1.jar 
    newLibs/datanucleus-jpa-query-4.0.4.jar 
    newLibs/datanucleus-rdbms-4.1.6.jar 
    newLibs/dom4j-1.6.1.jar 
    newLibs/ehcache-1.1.jar 
    newLibs/ehcache-core-2.2.0.jar 
    newLibs/geronimo-jta_1.1_spec-1.1.jar 
    newLibs/guava-15.0.jar 
    newLibs/h2-1.3.168.jar 
    newLibs/ibmjsse.jar 
    newLibs/javax.jdo-3.2.0-m3.jar 
    newLibs/javax.persistence-2.1.1.jar 
    newLibs/jaxrpc.jar 
    newLibs/jdo-api-3.1-rc1.jar 
    newLibs/jdom.jar 
    newLibs/joda-time-1.6.jar 
    newLibs/jtds-1.2.jar 
    newLibs/log4j-1.2.14.jar 
    newLibs/mail.jar 
    newLibs/saaj.jar 
    newLibs/servlet-api.jar 
    newLibs/wsdl4j-1.5.1.jar 
    newLibs/xercesImpl.jar 
    newLibs/xml-apis.jar 

J'ai aussi évité de placer plusieurs pots sur une ligne comme cela ne semble pas fonctionner (même avec des lignes moins de 72 octets). Ce qui m'a conduit à arriver à cette solution était (1) j'ai continué à obtenir diverses exceptions de classe non trouvées, et (2) Quand j'ai examiné le fichier manifeste généré dans le fichier jar, l'espacement entre les pots était manquant - Je suppose qu'il échouait silencieusement car il n'y avait pas d'erreur signalée à part les exceptions de classe non trouvées. Mon fichier manifeste de travail généré ressemble à ceci:

Manifest-Version: 1.0 
Implementation-Version: 2.0.0 
Class-Path: newLibs/asjava.zip newLibs/activation.jar newLibs/axis-an 
t.jar newLibs/axis.jar newLibs/bcel-5.1.jar newLibs/commons-discovery 
-0.2.jar newLibs/commons-logging-1.0.4.jar newLibs/datanucleus-api-jd 
o-4.2.0-release.jar newLibs/datanucleus-api-jpa-4.1.4.jar newLibs/dat 
anucleus-cache-4.0.4.jar newLibs/datanucleus-core-4.1.5.jar newLibs/d 
atanucleus-geospatial-4.1.0-release.jar newLibs/datanucleus-guava-4.1 
.3.jar newLibs/datanucleus-java8-4.2.0-release.jar newLibs/datanucleu 
s-jdo-query-4.2.0-release.jar newLibs/datanucleus-jodatime-4.1.1.jar 
newLibs/datanucleus-jpa-query-4.0.4.jar newLibs/datanucleus-rdbms-4.1 
.6.jar newLibs/dom4j-1.6.1.jar newLibs/ehcache-1.1.jar newLibs/ehcach 
e-core-2.2.0.jar newLibs/geronimo-jta_1.1_spec-1.1.jar newLibs/guava- 
15.0.jar newLibs/h2-1.3.168.jar newLibs/ibmjsse.jar newLibs/javax.jdo 
-3.2.0-m3.jar newLibs/javax.persistence-2.1.1.jar newLibs/jaxrpc.jar 
newLibs/jdo-api-3.1-rc1.jar newLibs/jdom.jar newLibs/joda-time-1.6.ja 
r newLibs/jtds-1.2.jar newLibs/junit-3.8.1.jar newLibs/log4j-1.2.14.j 
ar newLibs/mail.jar newLibs/saaj.jar newLibs/servlet-api.jar newLibs/ 
wsdl4j-1.5.1.jar newLibs/xercesImpl.jar newLibs/xml-apis.jar 
Main-Class: com.mypackage.MyApp 
+0

Cet approuch a fonctionné pour moi. –

+0

La nature capricieuse de ce format de fichier dépasse l'esprit, mais il semble que les deux espaces immédiatement après 'Class-Path:' un espace à la fin de la ligne et un avant chaque ligne, et enfin une nouvelle ligne supplémentaire à la la fin a fait l'affaire. Wow, je pense que je vais me verser une boisson forte maintenant. –

Questions connexes