【问题标题】:How to create jar file with package structure?如何创建具有包结构的 jar 文件?
【发布时间】:2013-08-11 08:47:29
【问题描述】:

我有一个文件夹结构

/com/cdy/ws/a.class files
/com/cdy/ws/b.class files
/com/cdy/ws/c.class files

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

谢谢

【问题讨论】:

    标签: java jar


    【解决方案1】:

    你想要的

    $ jar cvf asd.jar .
    

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

    【讨论】:

      【解决方案2】:

      从包含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
      

      【讨论】:

      • 谢谢.. 运行上述命令后我得到了包结构:)
      • @Daniel 请你帮我从这个源代码 github.com/upictec/org.json.me 构建一个 jar 我试过你的指示。我什至安装了 maven ,但仍然无法获取 jar :S
      【解决方案3】:

      您需要在文件的 处开始创建 JAR。

      例如:

      jar cvf program.jar -C path/to/classes .
      

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

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

      【讨论】:

      • 起初我对这个答案感到困惑。使其更具体可能对其他人有所帮助:如果您的类文件位于文件夹 1/folder2/folder3/com/example/test 中,并且您希望包结构为 com.example.test,则命令应为 jar cvf program.jar -C folder1/folder2/folder3 . (当然,句点是命令的一部分。)
      • @Adam Batkin 请你帮我从这个源代码github.com/upictec/org.json.me 构建一个罐子我试过你的指示。我什至安装了 maven ,但仍然无法获取 jar :S
      • @hBrent 最后一个. 是什么意思?
      • @smwikipedia 这意味着从指定路径的所有文件中构建 jar(类似于在其他上下文中使用 *.*)。如果您只想包含特定文件,我认为您可以指定文件名或文件名的一部分而不是句点。 (例如,我认为您可以只包含具有特定扩展名的文件,但由于这不是我的专业领域,我不确定它的语法是什么。)
      • @iamcreasy 它会起作用,但遵循普遍接受的以.jar 结束 JAR 文件的约定是一个好主意。这样您就知道文件包含什么,第三方工具可以轻松找到 JAR,新团队成员不会感到困惑等等......
      【解决方案4】:

      下面的代码给了我正确的响应

      jar cvf MyJar.jar *.properties lib/*.jar -C bin .  
      

      它添加了 (log4j) 属性文件,它在 lib.jar 中添加了 jar 文件。然后它进入 bin 以检索带有包的类文件。

      【讨论】:

        【解决方案5】:

        第 1 步:使用命令提示符(或 Linux shell 提示符)转到保存类的目录
        喜欢项目。
        C:/workspace/MyProj/bin/classess/com/test/*.class

        使用命令转到目录 bin:

        cd C:/workspace/MyProj/bin
        

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

        jar cvf helloworld.jar com\test\hello\Hello.class  com\test\orld\HelloWorld.class
        

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

        【讨论】:

          【解决方案6】:

          您指定的文件夹名称必须在 C:\Program Files\Java\jdk1.7.0_02\bin 路径上 包含类文件的文件夹名。

          C:\Program Files\Java\jdk1.7.0_02\bin>jar cvf program1.jar Foldername
          

          现在 program1.jar 将在 C:\Program Files\Java\jdk1.7.0_02\bin 路径下创建

          【讨论】:

            【解决方案7】:

            不止以上-

            1. 将您的 Java 打包内容保存在一个目录中,并确保里面除了您的 Java 包及其对应的 Java 类之外没有任何内容。

            2. 打开命令(如果是 Windows)提示符,到达包含的目录路径,如下所示 -

              C:> cd "C:\Users\UserABC\Downloads\Current Folder"

              C:\Users\UserABC\Downloads\当前文件夹>jar cvf hello-world-1.0.1.jar .

            【讨论】:

              【解决方案8】:

              为避免将源文件.java 添加到您的包中,您应该这样做

              cd src/
              jar cvf mylib.jar com/**/*.class
              

              假设你的项目结构是这样的

              myproject/
                  src/
                    com/
                      mycompany/
                        mainClass.java
                        mainClass.class
              

              【讨论】:

                【解决方案9】:

                这就是我在 .sh 文件中所做的,让我们考虑 install.sh

                #!/bin/sh
                echo Installing
                cd .../Your_Project_Directory/com/cdy/ws/
                jar cfe X.jar Main *.class
                cd .../Your_Project_Directory/
                ln -s .../Your_Project_Directory/com/cdy/ws/X.jar X
                echo Testing...
                java -jar X
                echo You are Good to Go...Use hapily
                #etc.
                

                在 Class 目录中创建可执行 Jar 文件并在您想要的任何位置创建 SymLink。

                运行它,

                $ sh install.sh[ENTER]
                $ java -jar X[ENTER]
                

                【讨论】:

                  【解决方案10】:

                  假设您的项目文件夹结构如下:

                  c:\test\classes\com\test\awt\Example.class
                  
                  c:\test\classes\manifest.txt
                  

                  您可以发出以下命令来创建“Example.jar”。

                  jar -cvfm Example.jar manifest.txt com/test/awt/*.class

                  例如:

                  从命令提示符“cd C:\test\classes”转到文件夹结构

                  C:\test\classes>jar -cvfm Example.jar manifest.txt com/test/awt/*.class

                  【讨论】:

                    猜你喜欢
                    • 1970-01-01
                    • 1970-01-01
                    • 2013-08-05
                    • 2021-12-28
                    • 1970-01-01
                    • 1970-01-01
                    • 2014-01-17
                    • 1970-01-01
                    • 2012-02-24
                    相关资源
                    最近更新 更多