2014-10-28 4 views
1

В настоящее время я пытаюсь запустить приложение из сценария bash. Когда я запускаю приложение java с консоли, он отлично работает. Я скомпрометировал приложение java и попробовал несколько разных команд внутри скрипта и не могу понять это. Я довольно новичок в написании сценариев, поэтому я предполагаю, что это связано с синтаксисом. Я также читал несколько разных сообщений, но ничего не работает.NoClassDefFoundError from Bash Script

Вот мой сценарий, и я бегу как ш endpoint.sh

#!/bin/bash 
CLASSPATH=json-simple-1.1.jar:log4j-1.2.17.jar:. 
result=$(java -cp $CLASSPATH com/api/endpoint/MyApp $INI) 
echo $result 

ошибка я получаю следующим образом

Exception in thread "Main Thread" java.lang.NoClassDefFoundError: com/api/endpoint/MyApp 
Caused by: java.lang.ClassNotFoundException: com.api.endpoint.MyApp 
at java.net.URLClassLoader$1.run(URLClassLoader.java:202) 
at java.net.URLClassLoader.findClass(URLClassLoader.java:190) 
at java.lang.ClassLoader.loadClass(ClassLoader.java:305) 
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308) 
at java.lang.ClassLoader.loadClass(ClassLoader.java:246) 
Could not find the main class: com/api/endpoint/MyApp. Program will exit. 

Приложение находится в пакете com.api .endpoint и находится в этом каталоге. У меня такое ощущение, что это простое, что я не замечаю, но я боролся с этим в течение нескольких дней. Есть идеи?

Полный сценарий:

#!/bin/bash 

# Set the search path for the shell to be the standard places. 
PATH=setting the path here; export PATH 

# Config file 
INI=config.ini 

# Log function 
function log() 
{ 
timestamp=`date +"%s"` 
echo "$timestamp:$1">>$ERROR_LOG_FILE 
} 

# Read config file 
if [ -f $INI ] 
then 
    source $INI 
else 
    exit 1 # terminate the script and return error 
fi 

# create error log file 
echo -n "" > $ERROR_LOG_FILE 

# prepare the WLST env to execute api list python script 
source $WLST_SCRIPT 

# call list.py 
result=$(java wb.WLST $WLST_PYTHON_SCRIPT) 

if [[ $result == *Exception* ]] 
then 
    log "$result" 
    exit 1 # terminate the script with error code 
fi 

# prepare the java env to execute region inventory java app 
PATH="/tmp/:$PATH"; export PATH 
#echo $PATH 

CLASSPATH=json-simple-1.1.jar:log4j-1.2.17.jar:. 
result=$(java -cp $CLASSPATH com/api/endpoint/MyApp $INI) 
echo $result 
+0

Что такое '$ INI'? Вы можете запустить эти * точные * команды вручную из одного и того же каталога и заставить его работать? –

+1

Я думаю, что основной аргумент класса использовался '.' Обозначение: 'com.api.endpoint.MyApp' – Arkadiy

+0

Что« находит. -name 'MyApp *' 'return? – Dancrumb

ответ

0

Пакеты разделены периодом (.), а не косая черта (/), так что:

#!/bin/bash 
CLASSPATH=json-simple-1.1.jar:log4j-1.2.17.jar:. 
# Note the classname: 
result=$(java -cp $CLASSPATH com.api.endpoint.MyApp $INI) 
echo $result 
+0

попробовал это. Не работает. – SKing