Как запустить файл java jar и сохранить результаты в переменных сценария оболочки - PullRequest
0 голосов
/ 07 марта 2020

У меня есть класс java, который имеет 3 метода, и каждый метод возвращает строку. Я экспортировал файл .jar из этого проекта Java. Когда я запускаю файл jar из git bast с помощью команды ./script1.sh, я получаю вывод в командном окне. У меня вопрос, как я могу назначить эти значения для трех переменных, которые находятся в файле 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";
    }
}

Имя файла фляги - Engine.jar. И мой файл сценария

runjar. sh

java -jar Engine.jar Source_branch Destination_brnach Destination_env

Ответы [ 2 ]

1 голос
/ 07 марта 2020

передача данных из java в bash

Если вы хотите сохранить данные из java в перекрывающей строке, вам нужно будет распечатать их в System.out и прочитать их из оболочки .

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.

Например, вы можете напечатать первую строку в вашем основном методе, используя

System.out.println(args[0]);

Если вы сделаете это, проверьте, если args.length больше самого высокого аргумента, к которому вы обращаетесь.

опция 2 - Свойства системы

Если вы хотите получить параметры без доступа к аргументам (независимо от вашего основного метода), вам нужно будет использовать Системные свойства.

Сначала измените скрипт так:

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");
}
0 голосов
/ 07 марта 2020

Создайте файл. sh в любом файловом редакторе, например:

$> vi runJar.sh

Затем вставьте следующий скрипт:

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

После сохранения файла дайте разрешение на выполнение. -

$> chmod +x runJar.sh

Затем запустите, используя

$> ./runJar.sh

Убедитесь, что файл JAR и файл сценария оболочки находятся в одном каталоге.

...