0

我使用 Apache CLI 库创建了一个可执行的 jar 文件。我在eclipse中开发了这个程序,它运行得很好。但是,我需要在 UNIX (solaris) 环境中执行此操作,但似乎没有任何效果。这是我使用的命令

   java -cp "$cPath" ./QueryHandler.jar "-i /home/xyzsd/java/QueryHandler/config/sybQuery.sql" "-U xxxxx" "-P xxxxxx,/" "-S Sybase" "-N xxxxxxx" "-s ##BusDate##=20150731" "-o /home/ertrgb/java/QueryHandler/config/output.xlsx"

$cPath 有我需要的所有 jar 的路径。

    export CLASSPATH=./:/usr/cvcv/fefef/wfvwerv/fefe/fwefwev/vswvrbvrb.jar:/usr
/cwvewv/dweqdecew/wevrrbrtb/wvvrtbtbb/cwweregrb.jar

  cliPath=$invinvnrv/cli/1.3.1/*
jsonPath=$nrunvunrvunr/json/1.1.1/*
poiPath=$ivcnurnvrnvb/poi/3.10.1/*

    cPath=$CLASSPATH:$cliPath:$jsonPath:$poiPath

当我尝试执行此操作时,我收到一条错误消息,指出它找不到 Apache CLI 的 JAR。所以,这是我的问题

在尝试在 UNIX 中实现 CLI 时,我有正确的语法吗?

我是否正确设置了所需 JAR 的路径?

请指教。

编辑

好的,这就是我尝试过的。我为我的 jar 执行了主类

java -cp $cPath MainHandler -i /home/xyzsd/java/QueryHandler/config/sybQuery.sql -U xxxxx -P xxxxxx,/ -S Sybase -N xxxxxxx -s '##BusDate##=20150731' -o /home/ertrgb/java/QueryHandler/config/output.xlsx

这行得通!但是,当我将所有文件 jar 并尝试执行时

java -cp $cPath -jar QueryHandler.jar -i /home/xyzsd/java/QueryHandler/config/sybQuery.sql -U xxxxx -P xxxxxx,/ -S Sybase -N xxxxxxx -s '##BusDate##=20150731' -o /home/ertrgb/java/QueryHandler/config/output.xlsx

这会引发异常

    Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/commons/cli/ParseException
        at java.lang.Class.getDeclaredMethods0(Native Method)
        at java.lang.Class.privateGetDeclaredMethods(Class.java:2531)
        at java.lang.Class.getMethod0(Class.java:2774)
        at java.lang.Class.getMethod(Class.java:1663)
        at sun.launcher.LauncherHelper.getMainMethod(LauncherHelper.java:494)
        at sun.launcher.LauncherHelper.checkAndLoadMain(LauncherHelper.java:486)
Caused by: java.lang.ClassNotFoundException: org.apache.commons.cli.ParseException
        at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
        at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:425)
        at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
        ... 6 more

所以基本上,它找不到我猜的cli jar。我还尝试在我创建的 jar 文件中包含我需要的所有库,但我仍然得到同样的错误。

请指教。

编辑 2

另一个更新。

这行得通

java -cp $cPath:QueryHandler.jar MainHandler -i /home/xyzsd/java/QueryHandler/config/sybQuery.sql -U xxxxx -P xxxxxx,/ -S Sybase -N xxxxxxx -s '##BusDate##=20150731' -o /home/ertrgb/java/QueryHandler/config/output.xlsx

但我不想提供主类的名称。我已经在清单文件中定义了它。

请指教。

4

0 回答 0