jar文件怎么打开 - Java创建.jar文件




jar打包 jar命令 (5)

我正在学习Java,但我遇到了问题。 我创建了6个不同的类,每个类都有自己的main()方法。 我想为每个类创建可执行的.jar ,即6个可执行的.jar文件。

到目前为止我试过了

java -jar cf myJar.jar myClass.class

我得到'无法访问jarfile cf' 。 我做错了什么,但我不知道是什么。 如果这意味着什么,我也在使用Eclipse IDE。


Answers

方式1:

让我们拥有包含主类testa的java文件test.java现在首先我们将java文件编译为javac test.java,我们在同一目录中创建文件manifest.txt并编写Main-Class:mainclassname。 例如:

  Main-Class: testa

然后我们通过这个命令创建jar文件:

  jar cvfm anyname.jar manifest.txt testa.class

然后我们通过这个命令运行jar文件:java -jar anyname.jar

方式2:

让我们有一个名为one的包,每个类都在其中。 然后我们通过这个命令创建jar文件:

  jar cf anyname.jar one

然后我们在anyname.jar文件中的目录META-INF中打开manifest.txt并写入

  Main-Class: one.mainclassname 

在第三行。然后我们通过这个命令运行jar文件:

  java -jar anyname.jar

使jar文件具有多个类文件:jar cf anyname.jar one.class two.class three.class ......


通常你需要在清单中放入比使用-e开关更多的内容,在这种情况下,语法是:

jar -cvfm myJar.jar myManifest.txt myApp.class

其中包含:“create verbose jarFilename manifestFilename”,后跟您要包含的文件。

请注意,您提供的清单文件的名称可以是任何名称,因为jar会自动重命名它并将其放在jar文件中的正确位置。


正如你提到的那样,你正在使用Eclipse ... Eclipse可以为你创建JAR,只要你运行每个具有main一次的类。 右键单击该项目,然后单击“导出”,然后在Java文件夹下选择“Runnable JAR file”。 在启动配置中选择类名,选择保存jar的位置,并在必要时决定如何处理库。 点击完成,擦上裤子的手。


要创建.jar文件,您需要使用jar而不是java

jar cf myJar.jar myClass.class

此外,如果要使其可执行,则需要为应用程序指定一个入口点 (即具有public static void main(String[] args) )。 这通常通过创建包含Main-Class标头的manifest文件来完成(例如, Main-Class: myClass )。

但是,正如Mark Peters指出的那样,使用JDK 6,您可以使用e选项来定义入口点:

jar cfe myJar.jar myClass myClass.class 

最后,您可以执行它:

java -jar myJar.jar

也可以看看


It ought to be possible to pack the 'cannot be a perfect square if the last X digits are N' much more efficiently than that! I'll use java 32 bit ints, and produce enough data to check the last 16 bits of the number - that's 2048 hexadecimal int values.

...

好。 Either I have run into some number theory that is a little beyond me, or there is a bug in my code. In any case, here is the code:

public static void main(String[] args) {
    final int BITS = 16;

    BitSet foo = new BitSet();

    for(int i = 0; i< (1<<BITS); i++) {
        int sq = (i*i);
        sq = sq & ((1<<BITS)-1);
        foo.set(sq);
    }

    System.out.println("int[] mayBeASquare = {");

    for(int i = 0; i< 1<<(BITS-5); i++) {
        int kk = 0;
        for(int j = 0; j<32; j++) {
            if(foo.get((i << 5) | j)) {
                kk |= 1<<j;
            }
        }
        System.out.print("0x" + Integer.toHexString(kk) + ", ");
        if(i%8 == 7) System.out.println();
    }
    System.out.println("};");
}

结果如下:

(ed: elided for poor performance in prettify.js; view revision history to see.)







java jar