【问题标题】:How can I create a jar file with an entry point inside a file tree?如何在文件树中创建一个带有入口点的 jar 文件?
【发布时间】:2014-07-09 04:46:33
【问题描述】:

我正在尝试使用此命令创建一个 jar 文件:

jar -cef ./bin/a/MainClass formatter.jar ./bin/*

其中 bin 包含两个带有类文件的文件夹(比如说“./bin/a/”和“./bin/b/”)。

我可以很好地创建 jar,但我似乎无法让它正确执行。它无需打印或执行任何操作即可运行。我认为它一定不是使用我提供的入口点。

MainClass 有一个简单的 main 方法:

public static void main(String[] args) {
   System.out.println("HIT");
}

我做错了什么? jar 是否必须与包含 main 的类在同一文件夹中创建?

根据要求编辑:jar -tf:

C:\Users\Jonathan\Documents\Workspace\JavaAutoFormatter>jar -tf formatter.jar
META-INF/
META-INF/MANIFEST.MF
bin/a/
bin/a/MainClass.class
bin/a/ParsedFile.class
bin/b/
bin/b/Token.class
bin/b/Tokenifier.class

【问题讨论】:

  • 如果您显示一个“jar -tf”可能会有所帮助,这样我们就可以看到 jar 的内容。以及 MainClass 的 hte 类声明
  • @Martin,我不相信这是该问题的重复。我知道如何创建可执行 jar - 我只是不确定如何使用隐藏在文件树中的类文件创建入口点。
  • @Mike,添加了 jar -tf 输出。所有文件都如我所料。我只是认为我的入口点不起作用。
  • 你的课程的包名是什么?你应该使用 -C bin 吗?
  • @Martin,我如何检查一个类的包名?

标签: java jar entry-point


【解决方案1】:

看到这个tutorialjar 命令的e 选项的参数应该是类名,而不是路径名。此外,在指定要包含在 jar 中的类列表时,应注意引用文件,以使目录结构与包名称匹配。否则类路径查找将失败。试试:

jar -cef a.MainClass formatter.jar -C bin .

【讨论】:

    【解决方案2】:

    来自维基百科 JAR (Java ARchive) 是一种包文件格式,通常用于聚合许多 Java 类文件和相关的元数据和资源(文本、图像、 等)到一个文件中进行分发。

    JAR 文件是包含 Java 特定清单的存档文件 文件。它们基于 ZIP 格式构建,通常具有 .jar 文件 扩展名。

    jar cvfem <f input> <e input> <m input> input_files
    jar cvfem Program.jar com.company.app.Main manifest.txt com net ..\img.png 
              ___________ ____________________ ____________ __________________
                   ^                 ^               ^       ^
                   |                 |               |       |
                   f                 e               m      input files
    

    在哪里

    • c = 创建 Jar 文件。
    • v = 详细输出。详细输出会告诉您添加到 JAR 文件中的每个文件的名称。
    • f = 输出到文件而不是标准输出。
    • e = jar 中的入口点。使用 java -jar Program.jar 运行 jar 文件。
    • m = 显示额外数据。

    Manifest.txt 内容

    Created-by: Joma
    
    • input_files = 文件,输入文件的目录,以空格分隔。

    生成的 Jar 内容

     __ com    
    |  |__ company
    |     |__ app
    |     |   \ Main.class
    |     |   \ Class1.class
    |     |   \ Class2.class
    |     |__ content
    |        \ Class3.class
    |        \ Class4.class
    |        \ Class5.class  
    |__ net
    |   \ file1.txt
    |   \file2.txt
    |__ img.png
    |__ META-INF
        \MANIFEST.MF
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-04-19
      • 2013-10-16
      • 2019-07-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多