我期待我的main方法的第二个参数是json文件的位置。当我从命令行调用应用程序时,这很好用,这是我们的操作团队将如何部署它。但是,当我尝试使用IDEA调用应用程序时,它会为进入我的main方法的args预先设置一堆其他args,并且我没有在第二个参数中获取json文件位置。当我将args输出到stderr时,我看到:
-Didea.launcher.port=7540
-Didea.launcher.bin.path=/Applications/IntelliJ IDEA 11.app/bin
-Dfile.encoding=UTF-8
-classpath
/Library/Java/JavaVirtualMachines/jdk1.7.0_45.jdk/Contents/Home/lib/ant-javafx.jar:blahblahblah:/Users/me/.m2/repository/org/springframework/spring-oxm/4.1.0.RELEASE/spring-oxm-4.1.0.RELEASE.jar:/Applications/IntelliJ IDEA 11.app/lib/idea_rt.jar
com.intellij.rt.execution.application.AppMain
com.pronto.JettyWebApp
server
path/to/app.json
(为了便于阅读,我基本上删除了类路径。)
这里是IDEA中的运行/调试配置屏幕:
如何阻止IDEA将这些额外的args添加到我的应用程序中?
答案 0 :(得分:0)
问题出在我的main方法的第一行,我实例化了org.eclipse.jetty.server.Server。
public class JettyWebApp {
public static void main(String[] args) throws Exception {
Server server = new Server();
if (args == null) {
System.err.println(errorMessage + ": args == null");
throw new RuntimeException(errorMessage);
}
String jsonFile = "";
for (String arg : args) {
System.err.println(arg);
if (StringUtils.contains(arg, ".json")) {
jsonFile = arg;
break;
}
}
...
}
如下所示的简短测试应用程序仅输出我在IDEA配置中提交给它的args。
public class TestForArgs {
public static void main(String[] args) throws Exception {
if (args == null) {
System.out.println("args == null");
}
for (String arg : args) {
System.out.println(arg);
}
}
}