2011-04-20 47 views
0

我需要创建我的Java应用程序的jar文件。对于第i个已创建了一个名为的Manifest.MF文件,在该文件中我已经存储在以下代码需要帮助通过Java命令创建Jar文件?

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

,然后我已在命令提示exceuted以下命令

jar cvfm JavaAppDemo.jar MANIFEST.MF "C:\JavaSamples\MyApp"

其中MyApp的是我的项目目录,在那里,我创造了包装和使用的其他jar文件也

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

java -jar JavaAppDemo.jar

,我得到了下面的异常

Exception in thread "main" java.lang.NoClassDefFoundError: com/demo/test/JavaTest

Caused by: java.lang.ClassNotFoundException: com.demo.test.JavaSamp at java.net.URLClassLoader$1.run(URLClassLoader.java:202) at java.security.AccessController.doPrivileged(Native Method) at java.net.URLClassLoader.findClass(URLClassLoader.java:190) at java.lang.ClassLoader.loadClass(ClassLoader.java:307) at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301) at java.lang.ClassLoader.loadClass(ClassLoader.java:248) Could not find the main class: com.demo.test.JavaTest. Program will exit.

请告诉我,我想创建一个罐子,我必须在我的项目目录中的文件打包到jar文件,当我提取我有我的项目的jar文件夹,但是当我运行我的jar我得到了上述异常,所以我很困惑,在哪里出现了循环漏洞。

+0

你有没有试过'java -cp。 -jar JavaAppDemo.jar'? – helpermethod 2011-04-20 11:45:23

+0

@Helper方法:不,我没有试过你的命令 – 2011-04-20 11:46:03

+1

@Helper方法:当使用'-jar'时忽略'-cp' – 2011-04-20 11:46:17

回答

0

你应该使用这个语法来构建你的罐子:

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

-c类新myclasspath手段,请告诉精细,即时通讯困惑,我想的jar文件和一些文件在我的当前目录捆绑到我的罐子,什么是类myclasspath – 2011-04-20 11:49:13

+1

@Selvi:“我希望捆绑的jar文件和一些文件在我当前的目录中添加到我的jar中“Java在其他Jars内部不支持Jars。它们必须分别添加到应用程序的运行时类路径中。这也可以通过将其他Jars列入包含'main(String [])'的Jar的清单来实现。 – 2011-04-20 12:56:23

0

好了好了几件事情:

这里是你如何来运行你的应用程序:

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

接招如果你不需要它,log4j就会出来。我相信你只是错过了“com.mywebsite.Benchmarks”这一行,它告诉jar开始的是哪个编译类。如果你有基准,FullTest,MainApp所有编译你的罐子和主要方法是在基准,你需要告诉罐子说。

至于建立你的罐子...

这是最容易使用的某种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. 你告诉罐子开始与阶级。

+0

对不起,我仍然感到困惑 – 2011-04-20 13:01:15

0

有些事情我能想到的:

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

也许你感到困惑的.class文件和.java文件。你确定你的.java文件实际上是编译进去的。类文件?这可能不太可能,但也可以这样说。

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