错误:无法找到或加载主类(另一个)

时间:2013-06-17 04:15:59

标签: java shell

我在整个网站上搜索并在收到此消息时尝试了一些解决方案,但似乎没有任何效果。

我正在尝试在运行java程序的Ubuntu 12.04.2(使用java-7-openjdk-amd64)上调用shell脚本然后我得到一个“错误:无法找到或加载主类com.xx”错误。

这是我的脚本调用Java的方式:

"$JAVA" $server_jvmargs $javaProps -Dxx.home="$XX_HOME" -Duser.dir="$XX_HOME" -cp $client_classpath $mainclass $args

您在上面看到的论点定义如下:

args=$*
javaProps=
mainclass=com.xx
server_jvmargs="-Djava.awt.headless=true -Xms1024m -Xmx1024m $jvmargs"
XX_HOME="`pwd`/../.."
client_classpath="$XX_HOME/lib/client/patch.jar;$XX_HOME/lib/client/xyx-xxx.jar;$clientlibs;$XX_HOME/lib/server/standard-1.1.2.jar;$publictilesource;$respath;$XX_HOME/lib/client/xxmainclass.jar"

mainclass变量位于xxmainclass.jar文件中的类路径中,所以我不确定它为什么找不到它?

有没有人对可能发生的事情有任何想法?

4 个答案:

答案 0 :(得分:2)

要查看运行脚本时发生实际的内容,请使用bash -x调用,或将set -x置于顶部;这会在每个命令运行之前打印出来,这样你就可以看到实际启动JVM的方式。没有这些信息,很难得出更好的诊断。那说......


你一直在复制Tomcat的启动脚本,它看起来像。别;他们太糟糕了。

在shell方面更正确的东西可能看起来像这样:

args=( "$@" )
javaProps=( )
mainclass=com.xx
server_jvmargs=( -Djava.awt.headless=true -Xms1024m -Xmx1024m "${jvmargs[@]}" )
XX_HOME="$PWD/../.."
client_classpath="$XX_HOME/lib/client/patch.jar:$XX_HOME/lib/client/xyx-xxx.jar:$clientlibs:$XX_HOME/lib/server/standard-1.1.2.jar:$publictilesource:$respath:$XX_HOME/lib/client/xxmainclass.jar"

java \
  "${server_jvmargs[@]}" \
  "${javaProps[@]}" \
  -Dxx.home="$XX_HOME" \
  -Duser.dir="$XX_HOME" \
  -cp "$client_classpath" \
  "$mainclass" "${args[@]}"

使用${foo[@]}会将数组foo展开为文字内容。请注意,在这种情况下,foo必须创建作为数组,并且您需要使用支持数组的shell(因此您的脚本需要以#!/bin/bash开头,而不是#!/bin/sh)。

有关bash中数组的介绍,请参阅http://mywiki.wooledge.org/BashFAQ/005

答案 1 :(得分:1)

使用a:而不是a;在你的类路径中。

unix只是这样滚动。

答案 2 :(得分:0)

试试这个:

Java -jar pathToYOurFile.jar

答案 3 :(得分:0)

请检查shell脚本中的行尾字符是否为特定于操作系统