通过Java命令创建Jar文件需要帮助吗?

时间:2011-04-20 11:41:27

标签: java jar

我需要创建我的java应用程序的jar文件。为此,我首先创建了一个名为Manifest.MF的文件,在该文件中我存储了以下代码

Manifest-Version: 1.0
Main-Class: com.demo.test.JavaTest

然后我在命令提示符

中提出了以下命令
  

jar cvfm JavaAppDemo.jar MANIFEST.MF“C:\ JavaSamples \ MyApp”

MyApp是我的项目目录,我创建了包并使用了其他jar文件

然后我尝试使用java命令运行jar

  

java -jar JavaAppDemo.jar

我得到了以下例外

  

线程“main”中的异常   java.lang.NoClassDefFoundError:   COM /演示/测试/ JavaTest

     

引起:   抛出java.lang.ClassNotFoundException:   com.demo.test.JavaSamp           在java.net.URLClassLoader $ 1.run(URLClassLoader.java:202)           在java.security.AccessController.doPrivileged(Native   方法)           在java.net.URLClassLoader.findClass(URLClassLoader.java:190)           at java.lang.ClassLoader.loadClass(ClassLoader.java:307)           在sun.misc.Launcher $ AppClassLoader.loadClass(Launcher.java:301)           在java.lang.ClassLoader.loadClass(ClassLoader.java:248)   无法找到主类:   com.demo.test.JavaTest。计划将   退出。

请告诉我,我想创建一个jar,我必须将我的项目目录中的文件捆绑到那个jar文件,当我解压缩jar我得到了我的项目文件夹,但是当我运行我的jar时我得到了上面的例外,所以我对环孔存在的地方感到困惑。

3 个答案:

答案 0 :(得分:0)

您应该使用此语法来构建jar:

jar cvfm myapp.jar myapp.MF -C classes myclasspath

答案 1 :(得分:0)

好的一些事情:

以下是运行应用程序的方法:

java -classpath myapplication.jar:.. -Dlog4j.info -Dlog4j.configuration=file:../../conf/log4j.xml com.mywebsite.Benchmarks

如果你不需要,请把log4j的东西拿出来。我相信你只是错过了“com.mywebsite.Benchmarks”行,它告诉jar哪个编译类开始。如果您的jar中已经编译了Benchmarks,FullTest,MainApp,并且main方法在Benchmarks中,那么您需要告诉jar。

至于建造你的罐子......

最简单的方法是使用某种ant构建脚本。

<target name="build">
  <delete file="MyApplication.jar" />
  <delete dir="_classes" />
  <mkdir dir="_classes" />
  <javac srcdir="src" destdir="_classes" debug="true">
    <classpath path="../../3rdParty/log4j/log4j-1.2.16.jar" />
  </javac>
  <jar jarfile="MyApplication.jar" basedir="_classes"/>
</target>

这应该让你开始。但是当你运行它时,你需要确定一些事情:

  1. 您拥有类路径上的所有依赖项。

  2. 你告诉jar从哪个类开始。

答案 2 :(得分:0)

我能想到的一些事情:

错误消息说它无法找到文件com / demo / test / JavaTest.class。您可以尝试使用zip文件程序查看您的jar文件(.jar文件就像.zip文件一样被压缩)以查看该文件是否真的不在那里。我怀疑错误代码实际上是正确的,因为它实际上并不存在,但至少你可以亲眼看到它(或不看它)。请记住,它必须以“com”文件夹开头。

也许你会混淆.class文件和.java文件。你确定你的.java文件实际编译成.class文件吗?这可能不太可能,但也可以说。

也许你需要在最后用"C:\JavaSamples\MyApp\*"运行你的jar命令来挑选出正确目录中的所有文件。也许你告诉jar命令包含文件夹“MyApp”。你实际上并不想要那个文件夹;你想要里面的所有文件。