我在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
?
答案 0 :(得分:1)
你必须要关心的两件事,假设你正在做一个文件 - >出口 - > Java - > Runnable JAR文件。
然后你就可以了
java -jar <your_jar>
答案 1 :(得分:1)
使用-cp ./*.jar
时,您必须确保在传递给Java之前shell不会扩展通配符 - 因此您必须引用类似-cp "./*.jar"
的类路径。如果所有需要的罐子都在当前目录中,那么一切都应该正常工作。