在ubuntu中使用命令行执行jar时出现问题

时间:2013-10-29 13:17:16

标签: java eclipse ubuntu jar

我在com.test.data包中有一个DataMerge java文件,它导入以下包:

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.HBaseConfiguration;
import org.apache.hadoop.hbase.client.*;
import org.apache.hadoop.hbase.util.Bytes;

现在我创建了DataMerge.java的jar(比如Merge.jar)文件。它只包含DataMerge.class文件,没有其他依赖的jar。所以我的第一个问题是我们可以以某种方式在Merge.jar中包含依赖文件吗? 现在我使用以下命令在ubuntu上运行此Merge.jar:

java -cp /home/user/Desktop/test/*.jar -jar Merge.jar

这是一个有效的命令,我在读取stackoverflow后意识到它并且它给出了Class not found的错误。

现在我尝试使用以下命令

java -cp ./*.jar Merge.DataMerge  (Merge is the jar file name and DataMerge is the main class)

再次抛出以下异常。我猜是因为jar(commons-lang-2.5.jar)文件名中的点(。)。

 Exception in thread "main" java.lang.NoClassDefFoundError: //commons-lang-2/5/jar
Caused by: java.lang.ClassNotFoundException: ..commons-lang-2.5.jar
    at java.net.URLClassLoader$1.run(URLClassLoader.java:217)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:205)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:321)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:294)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:266)
Could not find the main class: ./commons-lang-2.5.jar. Program will exit

那么,我如何执行我的jar在Windows上使用eclipse在ubuntu上从命令行执行我的jar,其中jar依赖项的名称为commons-lang-2.5.jar, slf4j-api-1.5.5.jar, commons-logging-1.1.1.jar

2 个答案:

答案 0 :(得分:1)

你必须要关心的两件事,假设你正在做一个文件 - >出口 - > Java - > Runnable JAR文件。

  1. 启动配置:这应该指向您要启动代码执行的类。它应该有一个public static void main(String s [])函数定义。
  2. 库处理:在您的情况下,您要选择“将所需的库打包到生成的JAR中”。
  3. 然后你就可以了 java -jar <your_jar>

答案 1 :(得分:1)

使用-cp ./*.jar时,您必须确保在传递给Java之前shell不会扩展通配符 - 因此您必须引用类似-cp "./*.jar"的类路径。如果所有需要的罐子都在当前目录中,那么一切都应该正常工作。