IDEA预装了服务器args

时间:2014-10-24 16:42:47

标签: java intellij-idea

我期待我的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中的运行/调试配置屏幕:

enter image description here

如何阻止IDEA将这些额外的args添加到我的应用程序中?

1 个答案:

答案 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);
        }
    }
}