好的,这是我的问题的第二轮。
我在记事本中创建了一个简单的程序,并将其保存为(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中没有主要的清单属性”
我搞砸了什么?
答案 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
指定入口点,第二个指定要包含的文件。注意,旗帜的顺序在这里很重要; m
,f
和e
信息应按指定标记的顺序显示。
答案 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结束。