如何 运行 一个 java jar 文件并将输出存储在 shell 脚本变量中

How to run a java jar file and get store the output in shell script variables

我有一个 java class,它有 3 个方法,每个方法 returns 一个字符串。我从那个 Java 项目中导出了 .jar 文件。当我使用命令 ./script1.sh 从 git bast 中 运行 jar 文件时,我在命令 window 中得到了输出。我的问题是,如何将这些值分配给 script1.sh 文件中的三个变量。如果我输入 echo ${"Source_branch"},我应该得到 "XXX_Source_Branch" 的输出。 这是我的 Java 代码:

package com.main;

public class Engine {

    public static void main(String[] args) {
        try {
         getSourceBranch();
         getDestinationBranch();
         getDestEnv();
        } catch (Exception e) {
         // TODO Auto-generated catch block
         e.printStackTrace();
        }
    }

    public static String getSourceBranch() {
        return "XXX_Source_Branch";
    }

    public static String getDestinationBranch() {
        return "XXX_Dest_Branch";
    }

    public static String getDestEnv() {
        return "XXX_Dest_Env";
    }
}

jar 文件的名称是 Engine.jar。 我的脚本文件是

runjar.sh

java-罐子Engine.jar Source_branch Destination_brnach Destination_env

使用任何文件编辑器创建 .sh 文件,例如-

$> vi runJar.sh

然后,粘贴下面的脚本,

#!/bin/sh
java -jar Engine.jar

保存文件后,赋予执行权限-

$> chmod +x runJar.sh

然后 运行 使用

$> ./runJar.sh

确保 jar 文件和 shell 脚本文件在同一目录中。

将数据从 java 传递到 bash

如果您想将数据从 java 保存到覆盖字符串,您需要将其打印到 System.out 并从 shell.

读取它们

Java代码:

System.out.println("your source branch")
System.out.println("your destination branch")

Shell代码

out="$(java -jar Engine.jar)"
sBranch="$(echo "$out"|sed -n '1p' /dev/stdin)"
destBranch="$(echo "$out"|sed -n '2p' /dev/stdin)"

将数据从 bash 传递到 java

如果您对字符串进行硬编码,java 将只使用字符串。如果你想改变它,你需要修改你的 java 代码。

选项 1 - 参数

如果您想使用 java -jar Engine.jar Source_branch Destination_brnach Destination_env 在脚本中传递字符串,您可以在带有 args 参数的 main 方法中使用它们。

例如,您可以使用

在 main 方法中打印第一个字符串
System.out.println(args[0]);

如果这样做,请测试 args.length 是否大于您正在访问的最高参数。

选项 2 - 系统属性

如果你想在不访问 args 的情况下获取参数(独立于你的 main 方法),你将需要使用系统属性。

首先,将脚本改成这样:

java -jar -DSource_branch=yourSourceBranch -DDestination_branch=yourDestinationBranch -DDestination_env=yourDestinationEnv

Engine.jar

注意-D。这表明您正在传递系统属性。它的语法是 -D<key>=<value>,它应该位于 java-jar 之间。

此外,您需要使用 System.getProperty() 从代码中的任何位置访问它。

例如:

public static String getSourceBranch() {
    return System.getProperty("Source_Branch");
}