Слишком длинная строка в файле манифеста при попытке создать банку - PullRequest
14 голосов
/ 17 июня 2010

Я получаю ошибку слишком длинной строки при попытке создать банку.длинная строка в файле манифеста - это строка Class-Path, поскольку приложение использует множество сторонних библиотек.Излишне говорить, что я использую Windows :-( и Eclipse Java 1.6

Я пытался Class-Path: lib или Class-Path: lib/, но они не работали.

Ответы [ 5 ]

34 голосов
/ 17 июня 2010

Путь к классу слишком длинный из-за количества файлов JAR в нем. «Никакая строка не может быть длиннее 72 байтов (не символов) в ее кодировке UTF8». [Из документов: java 5 , java 8 ; Раздел «Длина линии».

используйте для решения проблемы следующим образом:

(1) использовать отдельные строки, чтобы избежать слишком длинной строки для списков имен пакетов Java

(2) введите предшествующий пробел перед каждой следующей строкой, например:

Class-Path:
 ...jar
 ...jar
 ...jar
6 голосов
/ 02 ноября 2015

Один символ не работал для меня (Java 8, IntelliJ). Я использовал два символа в начале и не символы в конце строки (не было видно из приведенного выше примера) и две новые строки в конце, например

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

Я также избегал размещать несколько банок на одной строке, поскольку это не сработало (даже если строки меньше 72 байт).

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

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
6 голосов
/ 28 января 2014

Ответ Voodoochild поставил меня на правильный путь, но мне было не так ясно, так что процитировал спецификации:

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

Пример манифеста:

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 голосов
/ 21 марта 2019

Многопространственные решения там по какой-то причине не работали для меня.Поэтому я посмотрел, как это делает диалог Eclipse export-runnable-jar.Он добавляет Ascii "LF", а затем пробел в качестве переноса строки.В Java: char LF = (char) 0x0A;

0 голосов
/ 02 августа 2012

При слишком длинной ошибке в строке

Использовать путь к классу: *.*

...