Java 尝试创建 jar 时清单文件中的行太长

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/3057841/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-08-13 16:04:04  来源:igfitidea点击:

Too long line in manifest file while trying to create jar

javajarclasspathmanifest

提问by fadmaa

I am getting a too long line error while trying to build a jar. the long line in the manifest file is the Class-Path line as the application uses a lot of third-party libraries. needless to say, I am using Windows :-( and Eclipse Java 1.6

我在尝试构建 jar 时遇到了太长的行错误。清单文件中的长行是 Class-Path 行,因为应用程序使用了大量第三方库。不用说,我使用的是 Windows :-( 和 Eclipse Java 1.6

I tried Class-Path: libor Class-Path: lib/but they did not work.

我试过Class-Path: libClass-Path: lib/但他们没有工作。

采纳答案by VoodooChild

The classpath is too long due to the number of jar files in it. ?No line may be longer than 72 bytes (not characters), in its UTF8-encoded form.? [from docs: java 5, java 8; ?Line length? section].

由于其中的 jar 文件数量过多,类路径太长。?任何行的长度不得超过 72 个字节(不是字符),采用 UTF8 编码形式。[来自文档:java 5, java 8; ?线长?部分]。

use as the following way to resolve the problem:

使用以下方法解决问题:

(1) use separate lines, to avoid too long a line for java package name lists

(1) 使用单独的行,避免java包名列表一行太长

(2) type a preceding space before each folloing lines, for example:

(2) 在每行之前输入一个空格,例如:

Class-Path:
 ...jar
 ...jar
 ...jar

回答by Amirtharaj

For too long line error

对于太长的行错误

Use Class-Path: *.*

使用类路径: *.*

回答by L. G.

The answer of Voodoochild put me on the right track but wasn't so clear to me so quoting the specs:

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

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 example:

清单示例:

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 

回答by B5A7

The single character didn't work for me (Java 8, IntelliJ). I used two characters at the start and no characters at the end of the line (wasn't apparent from the above example) and two new lines at the end, e.g.

单个字符对我不起作用(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

I also avoided placing multiple jars on one line as that didn't appear to work (even with lines less than 72 bytes).

我还避免在一行上放置多个 jar,因为这似乎不起作用(即使行少于 72 字节)。

What led me to arrive at this solution was (1) I kept getting various class not found exceptions, of course and (2) When I examined the generated manifest file in the jar file, the spacing between the jars was missing - I assume that it was silently failing because there was no reported error apart from the class not found exceptions. My working, generated manifest file looks like this:

促使我得出这个解决方案的是(1)我不断收到各种未发现类的异常,以及(2)当我检查 jar 文件中生成的清单文件时,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

回答by DragonGamer

The multi-space solutions up there didn't work for me for some reason. So I looked at how Eclipse's export-runnable-jar dialog does it. It adds an Ascii "LF" and then a space as a linebreak. In Java: char LF = (char) 0x0A;

由于某种原因,那里的多空间解决方案对我不起作用。所以我查看了 Eclipse 的 export-runnable-jar 对话框是如何做到的。它添加一个 Ascii“LF”,然后添加一个空格作为换行符。在 Java 中:char LF = (char) 0x0A;