Ste*_*ase 5 java shell launch4j maven
我正在开发Java应用程序,主要是GUI应用程序。但是,它也提供了命令行界面。我可以将命令行参数分为三种不同的类型:
当我使用执行应用程序时java -jar <application-name>.jar -parameter
,一切都会按预期进行。应用程序执行要求执行的操作。在应用程序关闭或完成后,shell提示返回。
问题
当我使用launch4j从jar文件创建Windows包装器时,此行为会更改。shell提示总是立即返回。因此,我仍然可以传递命令行参数,但是无法通过终端与应用程序进行交互。它不打印任何写到stdout或stderr的内容,也不能从stdin读取任何内容。
题
如何配置launch4j创建一个exe包装器,该包装器提供与包装后的jar文件相同的命令行行为?
附加信息
我将launch4j maven插件用于以下配置:
<plugin>
<groupId>com.akathist.maven.plugins.launch4j</groupId>
<artifactId>launch4j-maven-plugin</artifactId>
<version>1.7.8</version>
<executions>
<execution>
<id>launch4j</id>
<phase>package</phase>
<goals>
<goal>launch4j</goal>
</goals>
<configuration>
<headerType>gui</headerType>
<stayAlive>true</stayAlive>
<outfile>path/to/outfile.exe</outfile>
<jar>path/to/infile.jar</jar>
<dontWrapJar>false</dontWrapJar>
<errTitle>Error in Launcher</errTitle>
<classPath>
<mainClass>com.example.Launch</mainClass>
<addDependencies>false</addDependencies>
</classPath>
<icon>path/to/icon.ico</icon>
<jre>
<minVersion>1.8.0</minVersion>
<initialHeapSize>512</initialHeapSize>
<maxHeapSize>1024</maxHeapSize>
</jre>
</configuration>
</execution>
</executions>
</plugin>
Run Code Online (Sandbox Code Playgroud)
launch4j的文档说,设置的给定组合headerType=gui
和 stayAlive=true
将等待应用程序关闭,情况并非如此。
由于我没有Windows机器,因此我无法尝试设置时发生的情况headerType=console
。文档说,这会使包装程序始终等待并返回应用程序的退出代码。但是,由于我的应用程序主要是GUI应用程序,所以我想知道此设置是否有负面影响。在这一点上,我开始问自己,为什么我希望包装的应用程序具有不同于jar文件的其他命令行行为。
我终于启动并运行了一台 Windows 机器来亲自测试这一点。
我通过替换这个解决了这个问题
<headerType>gui</headerType>
<stayAlive>true</stayAlive>
Run Code Online (Sandbox Code Playgroud)
以此
<headerType>console</headerType>
Run Code Online (Sandbox Code Playgroud)
根据文档stayAlive=true
实际上是由 暗示的headerType=console
,所以我可以安全地从配置中删除它。
我没有注意到这对 GUI 有任何副作用。唯一烦人的是,这会打开一个显示控制台输出的控制台。
所以,我想这个问题的预期解决方案是问题中描述的配置:headerType=gui
和stayAlive=true
。然而,这是行不通的。我认为这是 launch4j 中的一个错误。
归档时间: |
|
查看次数: |
1957 次 |
最近记录: |