我正在尝试使用在Ubuntu中创建的jar文件运行Java源代码,并且遇到无法检测到jar文件的问题。我已将所有jar文件复制到一个子文件夹中,并将源代码jar放在外面。我试图从主jar调用main函数,并且能够成功完成,但是以某种方式无法检测到相对子文件夹中的相对jar。我尝试了所有操作,包括创建或测试清单文件,但没有成功。我的代码在Eclipse IDE中运行良好。以下是我的Shell脚本代码-
LIB=./ChainLib/
echo "$LIB"
echo ls "$LIB"
CLASSPATH=./ChainLib/*.jar
export CLASSPATH=./ChainLib/*.jar
echo Classpath_is "$CLASSPATH"
#$(JARS=("$LIB"/*.jar); IFS=:;
#echo "${JARS[*]}")
jarnames=`ls ./ChainLib/*.jar`
for eachfile in $jarnames
do
echo $eachfile
done
#java -cp TestBlockchainkaranl.jar Testing
xvfb-run -a java -jar TestBlock.jar
当我在脚本上方运行时,我会到达以下位置:
bash RunBlockchain.sh
./ChainLib/
ls ./ChainLib/
Classpath_is ./ChainLib/*.jar
./ChainLib/bcpkix-jdk14-1.57.jar
./ChainLib/bcprov-jdk15on-1.59.jar
./ChainLib/commons-codec-1.11.jar
./ChainLib/commons-compress-1.5.jar
./ChainLib/fabric-sdk-java-1.2.1.jar
./ChainLib/httpclient-4.1.1.jar
./ChainLib/httpclient-4.5.6.jar
./ChainLib/httpcore-4.4.10.jar
./ChainLib/javax.json-1.1.jar
./ChainLib/netty-common-5.0.0.Alpha2.jar
./ChainLib/org-apache-commons-logging.jar
u1 Username
Y Filestatus
Exception in thread "main" java.lang.NoClassDefFoundError: org/hyperledger/fabric/sdk/User
at Testing.main(Testing.java:26)
Caused by: java.lang.ClassNotFoundException: org.hyperledger.fabric.sdk.User
at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:349)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
... 1 more
如何确保不会发生此问题并且我的罐子被成功检测到?
更新:我要添加创建的清单文件并将其压缩到jar文件中
这是清单代码:
Manifest-Version: 1.0
Main-Class: Testing
Class-Path:/home/ubuntu/KaranHyperledger/java/Blockchaintool/ChainLib/*.jar
Class-Path:/home/ubuntu/KaranHyperledger/java/Blockchaintool/TestBlock.jar
答案 0 :(得分:0)
Java不会检查CLASSPATH
环境变量。您必须明确地传递它。
java -cp TestBlockchainkaranl.jar:$CLASSPATH Testing