用java编译Jar

时间:2013-07-18 22:19:52

标签: java compiler-construction java-compiler-api

多年来我一直在使用IDE(Eclipse)来编译我的jar文件,这些年来我已经了解了它们是如何工作的但是我还是不完全理解jar如何知道main方法的位置,我也很好奇手动编译它是多么简单(或不是)
我有一个(我正在研究的)IDE需要能够编译和运行一个包含来自用户的文件和一个jar或一堆其他类(API)的jar,我有在这里看到一些问题提到Java JavaCompiler类,但从未给出演示代码,似乎没有人知道如何手动编译,所以我想贡献。那么,如何使用java代码创建一个jar文件呢?请提供演示代码。

1 个答案:

答案 0 :(得分:4)

  

我仍然不完全理解jar如何知道main方法的位置

这是manifest file的工作。

  

我也很好奇手动编译它是多么简单(或不)。

这非常简单 - 在构建类文件后使用jar tool

让我们全面了解一下。

创建名为src的目录和名为bin的目录。在src下,在该目录中创建一个目录demo和一个名为Test.java的文件:

package demo;

public class Test {
    public static void main(String[] args) {
        System.out.println("Working!");
    }
}

现在编译代码:

javac -d bin src/demo/Test.java

(这适用于Unix和Windows。)

然后创建一个名为manifest.txt的清单文件 - 它真正发生在哪里并不重要,但我暂时将其保留在src中:

Main-Class: demo.Test

现在构建一个jar文件:

jar cfm test.jar src\manifest.txt -C bin demo/Test.class

运行它:

java -jar test.jar

现在,您可以在命令行中指定入口点,而不是自己构建清单文件:

jar cfe test.jar demo.Test -C bin demo/Test.class

有关如何使用jar工具以及清单的潜在内容的更多详细信息,请参阅链接的文档。