0

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

我正在尝试在运行 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

4 回答 4

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 。

于 2013-06-17T05:05:29.063 回答
1

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

Unix就是这样滚动的。

于 2013-06-17T04:43:33.620 回答
0

尝试这个:

Java -jar pathToYOurFile.jar

于 2013-06-17T05:08:07.013 回答
0

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

于 2015-02-17T08:44:18.513 回答