获取'错误:无法找到或加载主类',即使jar中存在类
我们的项目中有一个命令行实用程序,它引用我们的项目jar并使用sh文件运行。它曾经在我们以前的版本中没有任何问题地工作。突然它停止了工作。即使jar包含在类路径中,当执行命令行实用程序时,也会收到错误“错误:无法找到或加载主类”。 通过使用ant 1.9.6和java 8构建项目来创建jar。
以下是创建jar的ant任务 -
<target name="jar-all" depends="compile">
<jar destfile="build/jar/${ant.project.name}-all.jar" basedir="build/classes/">
<zipgroupfileset dir="build/lib/" includes="*.jar"/>
<zipgroupfileset dir="WebContent/WEB-INF/lib/" includes="*.jar"/>
</jar>
</target>
我已经尝试过ant jar任务zip64mode思考jar文件的大小可能是一个问题。它没有任何区别。
为命令行实用程序(runprog.sh)设置类路径的Sh文件 -
#!/bin/bash
DISTDIR=/usr/share/deploy/tools/tools-dist/
APPCTX="applicationContext-tools.localhost.xml"
TOMCATDIR=/usr/share/tomcat8/lib/
_FXLCP=""
#/usr/share/java/groovy-all.jar
for d in "$TOMCATDIR $DISTDIR"; do
for f in `find ${d} -name \*.jar`; do
_FXLCP="${_FXLCP}:${f}"
done
done
_FXLCP="${_FXLCP}:/usr/share/java/xercesImpl.jar:/usr/share/tomcat8/lib/servlet-api.jar"
_CWD=`pwd`
cd $DISTDIR
java -classpath $_FXLCP ${1} ${APPCTX} ${@:2}
cd $_CWD
用于运行实用程序的Sh文件 -
#!/bin/bash
RUNCMD=/usr/share/deploy/tools/runprog.sh
echo "Select from the following tools:"
echo " 1) Searcher"
echo " 2) Duplicator"
echo -n "Enter a number: "
read _NUM
if [ "X${_NUM}" == "X1" ]; then
${RUNCMD} au.com.tools.Searcher
elif [ "X${_NUM}" == "X2" ]; then
${RUNCMD} au.com.tools.Duplicator
else
echo "Bad selection"
fi
在ant网站上阅读,为了构建java版本1.8代码,建议使用ant版本1.10.x.目前我们使用ant版本1.9.6。 unistalled ant 1.9.6并安装了1.10.3并构建了jar。仍然得到同样的错误。 还尝试比较它工作的版本的jar和不工作的版本,没有发现任何问题。
Java - 1.8
蚂蚁 - 1.9.6
平台 - Ubuntu 16.04
JAR尺寸 - 70.7 MB
爆炸JAR大小 - 161.1 MB