创建一个可行的jar

时间:2012-02-22 19:55:00

标签: java executable-jar manifest.mf

好的,这是我的问题的第二轮。 我在记事本中创建了一个简单的程序,并将其保存为(Blocktestgui.java)java文件。 我使用命令javac Blocktestgui.java编译并获取(Blocktestgui.class) 我创建了一个文本清单文件(见下文)并将其保存为manifest.mf 然后我运行命令jar cvf bg.jar Blocktestgui.class manifest.mf并获取(bg.jar)

这是我的java文件:

import javax.swing.JOptionPane;
public class Blocktestgui {
public static void main(String[] args) {

    String firstNumber, secondNumber;
    double number1, number2, sum;

    firstNumber=JOptionPane.showInputDialog ("Enter wall length in decimal feet:",JOptionPane.INFORMATION_MESSAGE);
    secondNumber=JOptionPane.showInputDialog ("Enter wall height in decimal feet:",JOptionPane.INFORMATION_MESSAGE);

    number1=Double.parseDouble (firstNumber);
    number2=Double.parseDouble (secondNumber);

    sum = (number1*number2) / 0.88;

    JOptionPane.showMessageDialog (null, "Total Blocks are " + sum,"Results",JOptionPane.PLAIN_MESSAGE);
    System.exit (0);
    }
}

这是我在创建jar之前的manifest.mf:

Main-Class: Blocktestgui

当我提取jar的内容时,我得到一个文件夹和两个文件

文件夹> - META-INF< - 包含MANIFEST.MF< - 此文件不包含主要类别:Blocktestgui

文件> - Blocktestgui.class

文件> - manifest.mf< - 所有这个文件都是Main-Class:Blocktestgui

TestFolder/
    |- META-INF/
        |- MANIFEST.MF (This file does not contain the line Main-Class: Blocktestgui)
    |- Blocktestgui.class
    |- manifest.mf (This file says is Main-Class: Blocktestgui)

当我使用java -jar bg.jar在控制台中运行jar文件时,它给出了一个错误“bg.jar中没有主要的清单属性”

我搞砸了什么?

3 个答案:

答案 0 :(得分:4)

您需要单独指定清单信息,而不仅仅是要包含的文件之一:

来自the docs

jar c[v0Mmfe] [manifest] [jarfile] [entrypoint] [-C dir] inputfiles [-Joption]

在你的情况下:

jar cvmf manifest.mf bg.jar Blockingtestgui.class

或者更简单地说,没有特定的清单文件:

jar cvfe bg.jar Blockingtestgui.class Blockingtestgui.class

第一个Blockingtestgui.class指定入口点,第二个指定要包含的文件。注意,旗帜的顺序在这里很重要; mfe信息应按指定标记的顺序显示。

答案 1 :(得分:1)

我建议使用构建工具来创建一个jar文件,而不是自己创建一个。

Apache Ant通常用于构建jar文件。

Here are instructions for installing Ant on Windows.

Here's a tutorial for writing an Ant build.xml file for your project.

答案 2 :(得分:0)

确保manifest.mf文件中的单行以新行charachter结束。