使用Inno Setup和maven

时间:2015-07-21 11:32:05

标签: java maven javafx cmd inno-setup

我有一个JavaFX应用程序,我正在使用maven插件javafx-maven-plugin来创建应用程序包(Windows中的app.exe,使用Inno Setup生成)。

当给出参数时,应用程序以控制台模式运行。

问题是当在控制台模式下运行时,我无法看到打印到控制台的消息。消息(使用System.out.println编写)不会出现在Windows控制台中。但它们是生成的,因为如果我将输出重定向到文件(app.exe> out.txt),则该文件包含所有消息。

我试图用cygwin运行.exe甚至在Linux中编译整个项目,在这两个项目中输出都正确显示在控制台中。所以问题似乎只有在使用Windows控制台(cmd)运行javafx exe时才会出现问题。我想stdout被重定向到某个地方。我怎么能改变这个?

1 个答案:

答案 0 :(得分:3)

首先:感谢您使用javafx-maven-plugin, 我是maven-plugin的维护者 。< / p>

简短版本:你做不了多少

长版: 问题来自于JDK的原生发射器,并且与InnoSetup和Maven都没有任何关系。

引用the source-code itself这就是:

Basic approach:
  - Launcher executable loads packager.dll/libpackager.dylib/libpackager.so and calls start_launcher below.
  - Reads app/package.cfg or Info.plist or app/<appname>.cfg for application launch configuration
     (package.cfg is property file).
  - Load JVM with requested JVM settings (bundled client JVM if availble, server or installed JVM otherwise).
  - Wait for JVM to exit and then exit from Main
  - To debug application by set env variable (TODO) or pass "/Debug" option on command line.
  - TODO: default directory is set to user's Documents and Settings.
  - Application folder is added to the library path (so LoadLibrary()) works.

在发射器中挖了一下后,如果找到了编译的地点where the STD-output is retrieved,因为on windows-systems "USE_JLI_LAUNCH" is not set。这个问题的真正问题在于只附加控制台编写器when being compiled with DEBUG-flag

的条件

它可能是JDK本身的一个错误/侥幸,我会尝试找到一些东西,并可能将其作为oracle-bug-tracker上的错误提交。

编辑:经过一些进一步挖掘后,我发现有趣的事情:生成的EXE文件是一个简单的Windows可执行文件,没有cli可执行文件as seen in the launcher-source-code,这就是原因您没有看到任何控制台输出,但在管道输入到某个文件时会产生结果。

解决方法:使用如下所述的重定向创建/编译您自己的原生启动器文件:

Redirecting cout to a console in windows

https://bobobobo.wordpress.com/2009/03/01/how-to-attach-a-console-to-your-gui-app-in-c/