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

Java 使用预配置的命令行参数打包jar,java,deployment,jar,Java,Deployment,Jar,我想知道是否有一种方法可以创建一个包含一些命令行参数的jar,这些参数通常在试图启动jar时在命令行中传递(这些参数随后传递给主函数)。基本上不是用 java -jar myapp.jar "arg1" "arg2", I want to start my app with java -jar myapp.jar 并将“arg1”和“arg2”传递给主函数 这背后的原因是,我希望将其部署到不同的环境中,并且我希望我的jar根据它所部署的环境包含不同的参数 也许还有其他方法可以达到类似的效果

我想知道是否有一种方法可以创建一个包含一些命令行参数的jar,这些参数通常在试图启动jar时在命令行中传递(这些参数随后传递给主函数)。基本上不是用

java -jar myapp.jar "arg1" "arg2", I want to start my app with 
java -jar myapp.jar
并将“arg1”和“arg2”传递给主函数

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

也许还有其他方法可以达到类似的效果

干杯

PS:正在寻找专业解决方案

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

假设我有两个环境:“生产”和“测试”。无论在什么环境中部署jar,我都希望以相同的方式运行它。因此,我始终希望使用:

java -jar myapp.jar

但是!为了让我的2个环境正常运行,我需要生产环境jar以参数“prod”启动它的主方法,我需要测试环境jar以参数“Test”启动它的主方法您可以定义一个简单的逻辑来处理不指定任何输入参数的情况;逻辑可以根据正确的平台/环境检索所需的值

例如:

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]);
    }
}
仅供参考,我使用eclipse创建了一个可运行的
jar
,并通过

java -jar Test01.jar


希望这有帮助

一种解决方案是更改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];
}
然后执行它类似于

java -cp myapp.jar CallerMyApp
public class CallerMyApp{

public void main(String[] args) {

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

}
java -cp myapp.jar CallerMyApp