【问题标题】:How to run a java jar file and get store the output in shell script variables如何运行 java jar 文件并将输出存储在 shell 脚本变量中
【发布时间】:2020-06-19 20:11:04
【问题描述】:

我有一个 java 类,它有 3 个方法,每个方法返回一个字符串。我从那个 Java 项目中导出了 .jar 文件。当我使用命令 ./script1.sh 从 git bast 运行 jar 文件时,我会在命令窗口中获得输出。我的问题是,如何将这些值分配给 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 -jar Engine.jar 源分支 Destination_brnach 目的地_env

【问题讨论】:

标签: java shell jar sh


【解决方案1】:

将数据从 java 传递到 bash

如果要将数据从 java 保存到覆盖的字符串,则需要将其打印到 System.out 并从 shell 中读取它们。

Java 代码:

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

外壳代码

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 传递字符串,您可以在main 方法中通过args 参数使用它们。

例如,您可以在 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");
}

【讨论】:

  • 感谢您分享这个答案。这真的很有帮助。
【解决方案2】:

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

$> vi runJar.sh

然后,粘贴下面的脚本,

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

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

$> chmod +x runJar.sh

然后使用

运行
$> ./runJar.sh

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

【讨论】:

  • 感谢您的评论。我在 git bash 命令提示符下得到输出。我想将输出存储在 shell 脚本文件中定义的变量中。我也相应地编辑了这个问题。请帮忙。提前致谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-12-08
  • 1970-01-01
  • 1970-01-01
  • 2019-03-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多