[英]Having issue running JAVA program inside BASH script
我有一個bash腳本,如下所示。 我在這里所做的所有事情都是試圖運行一個傳入classpath和其他輸入的Java程序。
[guest@server1]# cat runJava
#!/bin/bash
JARS=/home/guest/lib/*
CONFIG=/home/guest/AnalyticServer.properties
echo JARS=$JARS
echo CONFIG=$CONFIG
echo "java -cp \"$JARS\" com.test.ASDataSourceClient DELETE -c \"$CONFIG\" -n test_ds"
java -cp "$JARS" com.test.ASDataSourceClient DELETE -c "$CONFIG" -n test_ds
直接在命令行/終端上運行時,java程序運行得很好。 我什至測試了直接從終端上(逐一)運行上述腳本中的所有命令,並驗證了Java程序運行正常。 但是,當我通過腳本啟動這些命令時,出現了問題。 它甚至似乎都沒有正確執行echo“ java -cp ..”命令。
任何人都可以建議我可能缺少的東西。
[guest@server1]# bash runJava
JARS=/home/guest/lib/*
CONFIG=/home/guest/AnalyticServer.properties
" -n test_dsaSourceClient DELETE -c "/home/guest/AnalyticServer.properties
Exception in thread "main" java.lang.NoClassDefFoundError: com/test/ASDataSourceClient
Caused by: java.lang.ClassNotFoundException: com.test.ASDataSourceClient
at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
Could not find the main class: com.test.ASDataSourceClient. Program will exit.
由於通配符的工作方式, JARS=/home/guest/lib/*
不會執行您想要的操作。
相反,您可以使用
JARS=(/home/guest/lib/*) # Put all the jars in an array
IFS=: # Set the field separator to :
java -cp "${JARS[*]}" ... # Join all the array elements on the field separator
或模糊不清
JARS=""
for jar in /home/guest/lib/* # Loop through all the jar files
do
JARS="$JARS:$jar" # Append the jar file to the variable
done
java -cp "$JARS" ...
這將使JARS
變量包含以冒號分隔的jar文件列表。
指向包含JAR的目錄還不夠。 您需要明確命名它們,例如
JARS="/home/guest/lib/spring-beans-3.0.5.jar:anotherlibrary.jar"
我在您的腳本輸出中注意到了這條奇怪的行:
" -n test_dsaSourceClient DELETE -c "/home/guest/AnalyticServer.properties
這表示$ CONFIG以\\r
字符結尾。 您是否正在Windows文本編輯器中編輯此腳本? 使用dos2unix
刪除腳本中的回車
嘗試這個
#!/bin/bash
JARS=/home/guest/lib
CONFIG=/home/guest/AnalyticServer.properties
echo JARS=$JARS
echo CONFIG=$CONFIG
for file in `ls $JARS/*.jar`;
do
classpath=$classpath:$file
done
cmd="java -classpath $classpath com.test.ASDataSourceClient DELETE -c $CONFIG -n test_ds"
echo $cmd
exec $cmd
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.