java - 在 BASH 脚本中运行 JAVA 程序时出现问题

标签 java bash

我有一个如下所示的 bash 脚本。我在这里所做的只是尝试运行一个传入类路径和其他输入的 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 文件列表。

关于java - 在 BASH 脚本中运行 JAVA 程序时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21534379/

相关文章:

java - Android Studio 中的原始类型警告

mysql - 使用 bash 脚本加载 CSV 文件会出现错误,尽管在终端上启动 mysql 命令时不会抛出任何错误

linux - 如何在 GNU Parallel 中取回文件名包含空格的文件

java - 将 java 对象和方法调用转换为 Clojure 代码

java - 创建异常 : java. lang.OutOfMemoryError

java - 我该如何优化这个算法?使用字符

java - 字符串 switch case 标签的编译器错误

java - Bash 去除传递给 java 命令行应用程序的引号

linux - 自定义脚本 echo -e 参数

linux - 删除字符串中 "="之后的所有内容