我创建了这样的JAR文件:
jar cf Predit.jar *.*
我通过双击运行了这个JAR文件(它不起作用)。因此,我从DOS提示符运行了它,如下所示:
java -jar Predit.jar
它引发了“无法加载主类”异常。所以我提取了这个JAR文件:
jar -xf Predit.jar
我运行了类文件:
java Predit
运行良好。我不知道为什么JAR文件不起作用。请告诉我运行JAR文件的步骤
我创建了这样的JAR文件:
jar cf Predit.jar *.*
我通过双击运行了这个JAR文件(它不起作用)。因此,我从DOS提示符运行了它,如下所示:
java -jar Predit.jar
它引发了“无法加载主类”异常。所以我提取了这个JAR文件:
jar -xf Predit.jar
我运行了类文件:
java Predit
运行良好。我不知道为什么JAR文件不起作用。请告诉我运行JAR文件的步骤
Answers:
您需要在jar文件清单中指定Main-Class。
Oracle的教程包含完整的演示,但是这是从头开始的另一个示例。您需要两个文件:
Test.java:
public class Test
{
public static void main(String[] args)
{
System.out.println("Hello world");
}
}
manifest.mf:
Manifest-version: 1.0
Main-Class: Test
请注意,文本文件必须以换行符或回车符结尾。如果最后一行未以新行或回车结尾,则将无法正确解析。
然后运行:
javac Test.java
jar cfm test.jar manifest.mf Test.class
java -jar test.jar
输出:
Hello world
java -classpath Predit.jar your.package.name.MainClass
:
使用*
不会起作用,因为你的shell将扩大这样说:"/path/to/jars/a.jar" "/path/to/jars/b.jar"
但你真正想要的是:"/path/to/jars/a.jar:/path/to/jars/b.jar"
。
您必须将一个清单添加到jar中,以告知Java运行时主类是什么。创建具有以下内容的文件“ Manifest.mf”:
Manifest-Version: 1.0
Main-Class: your.programs.MainClass
将“ your.programs.MainClass”更改为实际的主类。现在,将文件放入名为“ META-INF”的子文件夹中的Jar文件中。您可以为此使用任何ZIP实用程序。
创建.class,.jar文件的一种非常简单的方法。
执行jar文件。无需过多担心清单文件。使它简单而优雅。
Java示例Hello World程序
public class HelloWorld {
public static void main(String[] args) {
System.out.println("Hello World");
}
}
编译类文件
javac HelloWorld.java
创建jar文件
jar cvfe HelloWorld.jar HelloWorld HelloWorld.class
要么
jar cvfe HelloWorld.jar HelloWorld *.class
运行jar文件
java -jar HelloWorld.jar
要么
java -cp HelloWorld.jar HelloWorld
爪哇
class Hello{
public static void main(String [] args){
System.out.println("Hello Shahid");
}
}
清单文件
Manifest-version: 1.0
Main-Class: Hello
在命令行上:
$ jar cfm HelloMss.jar manifest.mf Hello.class
$ java -jar HelloMss.jar
输出:
Hello Shahid
Eclipse可运行的JAR文件
创建一个Java项目– RunnableJAR
主班
public class RunnableMainClass {
public static void main(String[] args) throws InterruptedException {
System.out.println("Name : "+args[0]);
System.out.println(" ID : "+args[1]);
}
}
通过提供参数使用Java程序(cmd)运行Jar文件,并获取输出并在Eclipse控制台中显示。
public class RunJar {
static StringBuilder sb = new StringBuilder();
public static void main(String[] args) throws IOException {
String jarfile = "D:\\JarLocation\\myRunnable.jar";
String name = "Yash";
String id = "777";
try { // jarname arguments has to be saperated by spaces
Process process = Runtime.getRuntime().exec("cmd.exe start /C java -jar "+jarfile+" "+name+" "+id);
//.exec("cmd.exe /C start dir java -jar "+jarfile+" "+name+" "+id+" dir");
BufferedReader br = new BufferedReader(new InputStreamReader(process.getInputStream ()));
String line = null;
while ((line = br.readLine()) != null){
sb.append(line).append("\n");
}
System.out.println("Console OUTPUT : \n"+sb.toString());
process.destroy();
}catch (Exception e){
System.err.println(e.getMessage());
}
}
}
在Eclipse中找到捷径:
帮助►帮助目录►Java开发用户指南►参考►菜单和操作
我有这个文件夹结构:
D:\ JavaProjects \ OlivePressApp \ com \ lynda \ olivepress \ Main.class D:\ JavaProjects \ OlivePressApp \ com \ lynda \ olivepress \ press \ OlivePress.class D:\ JavaProjects \ OlivePressApp \ com \ lynda \ olivepress \ olives \ Kalamata .class D:\ JavaProjects \ OlivePressApp \ com \ lynda \ olivepress \ olives \ Ligurian.class D:\ JavaProjects \ OlivePressApp \ com \ lynda \ olivepress \ olives \ Olive.class
Main.class
在包装中 com.lynda.olivepress
还有另外两个软件包:
lynda.olivepress.press
com.lynda.olivepress.olive
1)创建一个以"Manifest.txt"
两行命名的文件,第一行是Main-Class,第二行是空行。
Main-Class: com.lynda.olivepress.Main
D:\ JavaProjects \ OlivePressApp \ Manifest.txt
2)使用清单和主类入口点创建JAR
D:\ JavaProjects \ OlivePressApp>jar cfm OlivePressApp.jar Manifest.txt com/lynda/olivepress/Main.class com/lynda/olivepress/*
3)运行JAR
java -jar OlivePressApp.jar
注意:com/lynda/olivepress/*
表示在第1点之前包括上述其他两个软件包