Проблема с java classpath в сценарии оболочки - jars не обнаруживаются - PullRequest
0 голосов
/ 03 октября 2018

Я пытаюсь запустить исходный код java, используя файл jar, который я создал в Ubuntu, и у меня возникает проблема с тем, что мои файлы jar не обнаруживаются.Я скопировал все мои файлы jar в подпапку и поместил мой jar исходного кода снаружи.Я пытаюсь вызвать функцию main из моего основного jar-файла и могу сделать это успешно, но каким-то образом относительные jar-файлы, которые находятся внутри моих относительных подпапок, не обнаруживаются.Я попробовал все, включая создание или тестирование файла манифеста, но это не сработало.Мой код работает нормально в Eclipse IDE.Ниже приведен код сценария моей оболочки -

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

1 Ответ

0 голосов
/ 03 октября 2018

Java не проверяет CLASSPATH переменную окружения.Вы должны передать это явно.

java -cp TestBlockchainkaranl.jar:$CLASSPATH Testing
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...