我在整个网站上搜索并在收到此消息时尝试了一些解决方案,但似乎没有任何效果。
我正在尝试在运行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文件中的类路径中,所以我不确定它为什么找不到它?
有没有人对可能发生的事情有任何想法?
答案 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脚本中的行尾字符是否为特定于操作系统