使用预配置的命令行参数打包jar

时间:2015-02-08 01:54:14

标签: java deployment jar

我想知道是否有办法创建一个包含一些命令行参数的jar,当一个人试图启动jar时,这些参数通常会在命令行中传递(这些参数然后传递给主功能)。基本上不是用

启动我的应用程序
java -jar myapp.jar "arg1" "arg2", I want to start my app with 
java -jar myapp.jar

并将“arg1”和“arg2”传递给main函数。

这背后的原因是我想将它部署到不同的环境,我希望我的jar根据它所部署的环境包含不同的参数。

也许还有另一种方法可以达到类似的效果?

干杯。

PS:寻找maven解决方案。

编辑:我将添加一个完整的示例,以使其更清晰:

假设我有2个环境:“生产”和“测试”。我想以同样的方式运行jar,无论我在什么环境中部署它。所以我总是想用它来运行它:

java -jar myapp.jar

但是!为了让我的2个环境运行正常,我需要生产环境jar来使用参数“prod”启动它的main方法,并且我需要Test环境jar来启动它的主方法并使用参数“test”。

2 个答案:

答案 0 :(得分:0)

如果我正确理解了你的问题,你可以在main()中定义一个简单的逻辑来处理你没有指定任何输入参数的情况;逻辑可以根据正确的平台/环境检索所需的值。

举个例子:

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,我使用eclipse创建了一个可运行的jar,然后通过

启动应用程序
java -jar Test01.jar

java -jar Test01.jar arg1 arg2

希望这有帮助!

答案 1 :(得分: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];
}

您还可以使用main函数创建另一个类,该类将调用真实函数。

public class CallerMyApp{

public void main(String[] args) {

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

}

然后执行类似

的操作
java -cp myapp.jar CallerMyApp