基于 Eclipse 的应用程序在 Windows 命令行上的输出仅在通过管道传输时可见(不直接在 cmd 中)
Output of application based on Eclipse on Windows command line only visible when piped (not directly in cmd)
我们有一个基于 Eclipse 的 Java 应用程序(主要 class 实现 IApplication
),它是从 Windows 命令行启动的。它在 System.out
上的输出不会 visible/printed 到启动它的命令 window 中。然而,当将输出通过管道传输到 more
时,输出是好的。怎么会?
例如,考虑 helloworld.exe
。当 运行 C:\>helloworld.exe
命令中 window 时,应用程序只是 returns。但是当运行C:\>helloworld.exe | more
时,屏幕显示
C:>helloworld.exe | more
hello world
C:>
在 linux 上,输出正常。如何查看 Windows 上的输出?
一些要求的信息:
- 应用程序非常大。我可能无法削减它。输出是对
System.out.prinln("xxx");
的简单调用
- Java 版本
1.8.0_60
, Eclipse 3.6.2
- 使用
>std.txt 2>err.txt
表明输出确实在标准输出上。
- 行尾是 CR/LF
.ini
文件如下
--launcher.suppressErrors
-vmargs
-Xms256m
-Xmx4096m
-Djava.naming.factory.initial=com.sun.jndi.fscontext.RefFSContextFactory
-Djava.library.path=plugins
也许 this issue 相关?
你最好使用一个框架来处理你的日志,比如 logback
这更便于移植和维护。
在您的示例中,您似乎已经从 java 代码创建了一个 exe。我的猜测是你用来创建 exe 的打包器对输出目标做了一些更改,因为它是你的 java 程序的包装器。
尝试创建一个 jar 并尝试通过 java -jar helloworld.jar.
执行它
字符串是否会发送到 stderr 而不是 stdout? (或者反过来,取决于您的预期行为)。
您可以使用 equinox 启动器启动基于 Eclipse RCP 的应用程序,如下所示:
java -jar plugins/org.eclipse.equinox.launcher_1.1.1.R36x_v20101122_1400.jar
当然,您必须找到您在 RCP 应用程序中使用的正确版本的 Equinox 启动器。
这样你会看到控制台日志。
您可以在这里阅读更多相关信息:http://wiki.eclipse.org/index.php/Starting_Eclipse_Commandline_With_Equinox_Launcher
编辑:当使用基于 eclipse.exe 的启动器时,您没有获得控制台日志的原因是因为 eclipse.exe 在 Windows 上产生了一个单独的进程,它会弹出另一个命令提示符 window.
如果您的应用程序以某种方式通过 eclipse.exe
启动(没有连接到它的控制台)更改调用以使用 eclipsec.exe
(连接到它的控制台,请注意 c
在应用程序名称中)。
我们有一个基于 Eclipse 的 Java 应用程序(主要 class 实现 IApplication
),它是从 Windows 命令行启动的。它在 System.out
上的输出不会 visible/printed 到启动它的命令 window 中。然而,当将输出通过管道传输到 more
时,输出是好的。怎么会?
例如,考虑 helloworld.exe
。当 运行 C:\>helloworld.exe
命令中 window 时,应用程序只是 returns。但是当运行C:\>helloworld.exe | more
时,屏幕显示
C:>helloworld.exe | more
hello world
C:>
在 linux 上,输出正常。如何查看 Windows 上的输出?
一些要求的信息:
- 应用程序非常大。我可能无法削减它。输出是对
System.out.prinln("xxx");
的简单调用
- Java 版本
1.8.0_60
, Eclipse3.6.2
- 使用
>std.txt 2>err.txt
表明输出确实在标准输出上。 - 行尾是 CR/LF
.ini
文件如下
--launcher.suppressErrors
-vmargs
-Xms256m
-Xmx4096m
-Djava.naming.factory.initial=com.sun.jndi.fscontext.RefFSContextFactory
-Djava.library.path=plugins
也许 this issue 相关?
你最好使用一个框架来处理你的日志,比如 logback
这更便于移植和维护。
在您的示例中,您似乎已经从 java 代码创建了一个 exe。我的猜测是你用来创建 exe 的打包器对输出目标做了一些更改,因为它是你的 java 程序的包装器。 尝试创建一个 jar 并尝试通过 java -jar helloworld.jar.
执行它字符串是否会发送到 stderr 而不是 stdout? (或者反过来,取决于您的预期行为)。
您可以使用 equinox 启动器启动基于 Eclipse RCP 的应用程序,如下所示:
java -jar plugins/org.eclipse.equinox.launcher_1.1.1.R36x_v20101122_1400.jar
当然,您必须找到您在 RCP 应用程序中使用的正确版本的 Equinox 启动器。
这样你会看到控制台日志。
您可以在这里阅读更多相关信息:http://wiki.eclipse.org/index.php/Starting_Eclipse_Commandline_With_Equinox_Launcher
编辑:当使用基于 eclipse.exe 的启动器时,您没有获得控制台日志的原因是因为 eclipse.exe 在 Windows 上产生了一个单独的进程,它会弹出另一个命令提示符 window.
如果您的应用程序以某种方式通过 eclipse.exe
启动(没有连接到它的控制台)更改调用以使用 eclipsec.exe
(连接到它的控制台,请注意 c
在应用程序名称中)。