如果 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.