Java 提取和重建Jar文件时,isn';行不通

Java 提取和重建Jar文件时,isn';行不通,java,eclipse,jar,project,manifest,Java,Eclipse,Jar,Project,Manifest,关于这一点,我会尽量说得清楚简洁 我有一个jar文件的一个项目,这是完美的工作。现在我需要对应用程序做一些更改,所以我使用这个命令提取了这个jar jar xf jwire.jar 提取的文件是 META-INF(包含清单文件) 资源(包含应用程序中使用的图片) Jwire(包含类和java文件) .classpath .项目 manifest.mf(另一个清单文件,具有指向主类的其他路径) 根据某人的建议,我还在这里添加了两个空文件夹src和bin。 现在,我尝试使用所有这些文件夹再

关于这一点,我会尽量说得清楚简洁

我有一个jar文件的一个项目,这是完美的工作。现在我需要对应用程序做一些更改,所以我使用这个命令提取了这个jar

  jar xf jwire.jar
提取的文件是

  • META-INF(包含清单文件)
  • 资源(包含应用程序中使用的图片)
  • Jwire(包含类和java文件)
  • .classpath
  • .项目
  • manifest.mf(另一个清单文件,具有指向主类的其他路径)
根据某人的建议,我还在这里添加了两个空文件夹src和bin。 现在,我尝试使用所有这些文件夹再次创建jar文件。 在不进行任何类型的更改的情况下,我尝试使用以下方法重建这个jar

      jar cf newjar.jar G:\Project1\project 
注意:-我猜这是构建文件的正确方法。如果不正确,请指出。

G:\Project1\project是指向上述文件和文件夹的路径。 使用此命令创建的jar大小为729kb,而早期的jar大小为711Kb,当我使用以下命令运行它时

     java -jar newjwire.jar
我得到以下信息

        no main manifest attribute, in newjwire.jar
接下来,我尝试提取这个newjwire.jar文件以查看其清单文件。我得到了这个包含MANIFEST.MF文件的META-INF文件夹。它没有主类的路径,所以我编辑了它,并使用下面的命令将修改后的文件重新打开

        jar uf newjwire.jar META-INF/MANIFEST.MF
当我运行这个jar时,我得到以下消息

              Error: Ivalid or corrupt jarfile newjwire.jar
我做错了什么?我是否以正确的方式构建jar文件?我也使用了EclipseJuno,它向mainclass提供了相同的消息。有一个主类组成主函数。这与我的原始jar有两个清单文件有关吗


我希望这个问题是可以理解的。清晰详细的答案将不胜感激。

您应该通过
JAR uf JAR文件输入文件更新JAR文件。

查看此链接:

根据需要,在创建或更新JAR时,您需要显示
Manifest.txt
,或者使用
e
选项指定主类。在你的情况下,后者可能更有意义

jar cfe newjar.jar mypackage.MainClass G:\Project1\project

尝试使用
jar.jar
列出重建的jar内容;这些内容是你想要的吗?用zip浏览器打开它并检查它的树structure@DavidWallace她提取、添加两个文件夹并将其打包,而不使用
jar uf
@mangusta。我提取了清单文件并对其进行了编辑。然后我使用jar uf newjwire.jar META-INF/MANIFEST.M将其放回我的newjwire.jar中。接下来,它就失效了file@user1613603重建之前和之后的jar清单有什么不同吗?尝试使用
jar cfm
构建,并包含jar的旧清单(原始清单)@mangusta我正在做完全相同的事情,但不知何故清单再次发生更改,清单文件仍然为空。当我使用“jaruf”命令更新新的jar时,jar变得无效。我照你说的做了。“jar cfe newjar.jar jwire.f G:\Project1\project”。当我运行它时,我收到一条消息“错误:无法找到或加载主类jwire.f”。那么文件
jwire/f.class
是否存在?@user1613603:)您应该为
f
类指定完整的包路径。似乎
f
在某个地方else@david是的。但是我必须在这里通知您,原始的可工作jar由两个清单文件组成。一个是在META-INF中,它有“mainclass:jwire.f”,而另一个manifest.mf文件有这一行“mainclass:furi.f”。当我检查jwire中包括文件“f”在内的文件的代码时,它们都导入了jwire包。但是当我在eclipse上导入这个项目时,显示的包是furi。这很令人困惑。我很难理解所有这些细节。为什么有两个清单文件?不管怎样,它可能并不相关——只有META-INF中的那一个才有区别。因此,主类文件是
G:\Project1\project\jwire\f.class
,它的源文件顶部有
package jwire
,称为
f.java
,对吗?