1

DataMerge在 com.test.data 包中有一个 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 文件,没有其他依赖的 jars。所以我的第一个问题是我们能否以某种方式将依赖文件包含在 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

那么,我如何从命令行使用 Eclipse 在 ubuntu 上执行我的 jar,该 jar 具有类似名称的 jar 依赖项commons-lang-2.5.jar, slf4j-api-1.5.5.jar, commons-logging-1.1.1.jar

4

2 回答 2

1

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

于 2013-10-29T14:05:49.840 回答
1

假设您正在执行 File -> Export -> Java -> Runnable JAR 文件,您必须关心两件事。

  1. 启动配置:这应该指向您要开始执行代码的类。它应该定义一个 public static void main(String s[]) 函数。
  2. 库处理:在您的情况下,您想选择“将所需的库打包到生成的 JAR 中”。

然后你可以做 java -jar <your_jar>

于 2013-10-29T13:32:28.327 回答