如果 Java 文件抛出异常,如何 return 非零退出代码
How to return non-zero exit codes if Java file throws exceptions
我正在使用下面的脚本(.sh 文件)来 运行 UNIX 系统中的 java 代码,但即使 Java 在这两种情况下都给出异常或成功终止,
退出代码为 0,我想从脚本中 return 非零退出代码,如果 Java 运行 抛出异常,以便我可以添加 if-then 检查脚本,打印成功或失败消息。
#!/bin/sh
echo 'processing started -->>'
LOC=/opt/appl/Mapping/
export JAVA_HOME=/usr/java6
export PATH=/usr/java6/bin
LD_LIBRARY_PATH=/opt/appl/JARS/
export LD_LIBRARY_PATH
java -classpath $LOC/ojdbc6-11.2.0.3.0.jar:$LOC/ds35-02.00.11.jar:$LOC/log4j-1.2.17.jar:$LOC/TestClasses.jar:$LOC/db2jcc_license_cisuz-3.0.0.jar:$LOC/db2jcc_license_cu-3.0.0.jar:$LOC/db2jcc-3.0.0.jar -Xms256M -Xmx512M com.home.backfill.TestRun
我可以在 Java 文件中使用 Try-catch 并在 catch 块中使用 System.exit(1)
,但我正在寻找任何好的通用方法,因为我的代码可能很长,不确定是否将 System.exit(1)
放在每个 catch 块中是个好主意。
如果我没理解错的话,你为什么不运行一个通用函数来确定要return的代码类型?
try {
//your code here
} catch(YourException e){
Handler.handle(e);
}
其中 Handler.handle(e)
接受异常并确定用于关闭系统的整数。至少你有一个系统关闭的集中点。
如果你想要通用的东西:
interface ExceptionAction {
public void apply() throws Exception;
}
class Catcher {
public static void invoke(ExceptionAction ea) {
try{
ea.apply();
} catch(Exception e) {
System.exit(1);
}
}
}
然后通过创建 lambda 来调用。 (您必须将任何 'return' 值设置为捕获的局部变量):
Catcher.invoke(() -> {
/// your code here
});
我会注意到,这与 try
/catch
一样冗长,而后者可能更 readable/colloquial.
我正在使用下面的脚本(.sh 文件)来 运行 UNIX 系统中的 java 代码,但即使 Java 在这两种情况下都给出异常或成功终止, 退出代码为 0,我想从脚本中 return 非零退出代码,如果 Java 运行 抛出异常,以便我可以添加 if-then 检查脚本,打印成功或失败消息。
#!/bin/sh
echo 'processing started -->>'
LOC=/opt/appl/Mapping/
export JAVA_HOME=/usr/java6
export PATH=/usr/java6/bin
LD_LIBRARY_PATH=/opt/appl/JARS/
export LD_LIBRARY_PATH
java -classpath $LOC/ojdbc6-11.2.0.3.0.jar:$LOC/ds35-02.00.11.jar:$LOC/log4j-1.2.17.jar:$LOC/TestClasses.jar:$LOC/db2jcc_license_cisuz-3.0.0.jar:$LOC/db2jcc_license_cu-3.0.0.jar:$LOC/db2jcc-3.0.0.jar -Xms256M -Xmx512M com.home.backfill.TestRun
我可以在 Java 文件中使用 Try-catch 并在 catch 块中使用 System.exit(1)
,但我正在寻找任何好的通用方法,因为我的代码可能很长,不确定是否将 System.exit(1)
放在每个 catch 块中是个好主意。
如果我没理解错的话,你为什么不运行一个通用函数来确定要return的代码类型?
try {
//your code here
} catch(YourException e){
Handler.handle(e);
}
其中 Handler.handle(e)
接受异常并确定用于关闭系统的整数。至少你有一个系统关闭的集中点。
如果你想要通用的东西:
interface ExceptionAction {
public void apply() throws Exception;
}
class Catcher {
public static void invoke(ExceptionAction ea) {
try{
ea.apply();
} catch(Exception e) {
System.exit(1);
}
}
}
然后通过创建 lambda 来调用。 (您必须将任何 'return' 值设置为捕获的局部变量):
Catcher.invoke(() -> {
/// your code here
});
我会注意到,这与 try
/catch
一样冗长,而后者可能更 readable/colloquial.