如何 运行 一个 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");
}
我有一个 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");
}