2015-02-08 2 views
0

Мне интересно, есть ли способ создать банку, которая содержит в себе некоторые аргументы командной строки, аргументы, которые обычно передаются в командной строке при попытке запустить банку (эти параметры затем передаются на основную функцию). В основном вместо того, чтобы начинать мое приложение сУпаковка jar с предварительно сконфигурированными аргументами командной строки

java -jar myapp.jar "arg1" "arg2", I want to start my app with 
java -jar myapp.jar 

и имеют «arg1» и «arg2», переданные основной функции.

Причина в том, что я хочу развернуть это в разных средах, и я хочу, чтобы в моем банке были разные параметры в зависимости от среды, в которой он развертывается.

Возможно, есть другой способ добиться аналогичных результатов?

Cheers.

PS: Поиск решения maven.

Edit: Я добавлю полный пример, чтобы сделать это немного более ясным:

Скажем, у меня есть 2 среды: «Производство» и «Test». Я хочу запустить банку таким же образом, независимо от того, в какой среде я ее развертываю. Поэтому я всегда хочу запустить его с:

java -jar myapp.jar 

Но! Для того, чтобы мои 2 среды работали нормально, мне нужно создать среду разработки, чтобы начать ее основной метод с аргументом «prod», и мне нужен контейнер тестовой среды, чтобы запустить его основной метод с аргументом «test».

ответ

0

Если я правильно понял вашу проблему, в вашем main() вы могли бы определить простую логику для обработки случая, когда вы не укажете какой-либо входной параметр; логика может получить желаемые значения в соответствии с правильной платформой/env.

В качестве примера:

public class Test01 
{ 
    public static void main(String... aaa) 
    { 
     // Check input 
     if(aaa.length == 0) { 
      /* Insert logic to retrieve the value you want, depending on the platform/environment. 
      * A trivial example could be: */ 
      aaa = new String[2]; 
      aaa[0] = "First value"; 
      aaa[1] = "Second value"; 
     } 

     // Processing, e.g. print the 2 input values 
     System.out.println(aaa[0] + ", " + aaa[1]); 
    } 
} 

Fyi, я создал работоспособную jar с использованием затмения, и запустить приложение либо

java -jar Test01.jar 

или

java -jar Test01.jar arg1 arg2 

Надеется, что это помогает!

0

Одним из решений является изменение main (String [] args) для получения значений из env var, если они отсутствуют в переданных аргументах.

String user; 
String password; 
if(args.length < 2) 
{ 
    user = System.getenv("appUser"); 
    password = System.getenv("appPassword"); 
} else { 
    user = args[0]; 
    password = args[1]; 
} 

Вы также можете создать другой класс с основной функцией, которая будет называться реальной.

public class CallerMyApp{ 

public void main(String[] args) { 

    String[] realArgs = {System.getenv("appUser"), System.getenv("appPassword")}; 
    MyApp.main(realArgs); 
} 

} 

Затем выполнить его что-то вроде

java -cp myapp.jar CallerMyApp 
Смежные вопросы