如何用包结构创建jar文件?

And*_*son 40 java jar

我有一个文件夹结构

/com/cdy/ws/a.class files
/com/cdy/ws/b.class files
/com/cdy/ws/c.class files
Run Code Online (Sandbox Code Playgroud)

当我运行以下命令"jar cvf asd.jar*.class"时,它给jar提供了所有类文件.但是没有生成文件夹结构.所有类文件都必须在"com.cdy/ws"下,但所有类都在META-INF的相同级别.谁能告诉我生成包结构的命令是什么?

谢谢

Ada*_*kin 78

您需要开始在文件的根目录下创建JAR .

所以,例如:

jar cvf program.jar -C path/to/classes .
Run Code Online (Sandbox Code Playgroud)

假设path/to/classes包含com目录.

仅供参考,这些天大多数人jar直接使用命令是相对不常见的,因为他们将使用诸如AntMaven之类的构建工具来处理(以及构建的其他方面).值得努力的是允许其中一个工具处理构建的所有方面,并且通过一个好的IDE来帮助编写build.xml(Ant)或pom.xml(Maven)更加容易.

  • 起初我对此答案感到困惑.使其更具体可能有助于其他人:如果您的类文件位于folder1/folder2/folder3/com/example/test中,并且您希望包结构为com.example.test,则该命令应为`jar cvf program .jar -C folder1/folder2/folder3 .`(当然,句点是命令的一部分.) (16认同)
  • @hBrent最后一个`.`是什么意思? (2认同)
  • @smwikipedia 这意味着从指定路径的所有文件中构建 jar(类似于在其他上下文中使用 `*.*`)。如果您只想包含特定文件,我认为您可以指定文件名或文件名的一部分而不是句点。(例如,我认为您可以仅包含具有特定扩展名的文件,但由于这不是我的专业领域,我不确定其语法是什么。) (2认同)

Bri*_*new 14

你要

$ jar cvf asd.jar .
Run Code Online (Sandbox Code Playgroud)

指定目录(例如.)jar来自.这将在jar文件中维护您的文件夹结构.


Dan*_*iel 9

从包含该com文件夹的目录:

$ jar cvf asd.jar com
added manifest
adding: com/(in = 0) (out= 0)(stored 0%)
adding: com/cdy/(in = 0) (out= 0)(stored 0%)
adding: com/cdy/ws/(in = 0) (out= 0)(stored 0%)
adding: com/cdy/ws/a.class(in = 0) (out= 0)(stored 0%)
adding: com/cdy/ws/b.class(in = 0) (out= 0)(stored 0%)
adding: com/cdy/ws/c.class(in = 0) (out= 0)(stored 0%)

$ jar -tf asd.jar 
META-INF/
META-INF/MANIFEST.MF
com/
com/cdy/
com/cdy/ws/
com/cdy/ws/a.class
com/cdy/ws/b.class
com/cdy/ws/c.class
Run Code Online (Sandbox Code Playgroud)


Vin*_*ala 7

步骤1:使用命令提示符(或Linux shell提示符)转到保存类的目录
.与Project一样.
C:/workspace/MyProj/bin/classess/com/test/*.class

使用命令转到目录bin:

cd C:/workspace/MyProj/bin
Run Code Online (Sandbox Code Playgroud)

第2步:使用以下命令生成jar文件.

jar cvf helloworld.jar com\test\hello\Hello.class  com\test\orld\HelloWorld.class
Run Code Online (Sandbox Code Playgroud)

使用上面的命令,类将被放置在目录结构的jar中.