我想知道是否有办法创建一个包含一些命令行参数的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”。
答案 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