我正在開發一個Java應用程序,主要是一個GUI應用程序。但是,它也提供了一個命令行界面。我可以將命令行參數分爲三種不同的類型:如何使用launch4j來封裝也提供命令行界面的GUI應用程序?
- 第一種類型的參數改變了GUI的行爲。
- 第二種類型以特定狀態啓動GUI。
- 第三種類型導致應用程序直接執行操作而不顯示GUI。
當我使用java -jar <application-name>.jar -parameter
執行應用程序時,一切都按預期工作。應用程序執行要求的操作。應用程序關閉或完成後,shell提示符會返回。
問題
當我使用launch4j從jar文件創建一個Windows的包裝,這種行爲的改變。 shell提示符總是立即返回。因此,我仍然可以傳遞命令行參數,但是我無法通過終端與應用程序交互。它不打印寫入標準輸出或標準錯誤的任何內容,也不能從標準輸入讀取任何內容。
問題
我如何配置launch4j創建一個exe包裝,提供相同的命令行的行爲與包裹的jar文件?
其他信息
我用launch4j行傢俱有以下配置插件:
<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>
的documentation of launch4j說,是的設置headerType=gui
和stayAlive=true
給定的組合將等待應用程序關閉,事實並非如此。
因爲我沒有可用的Windows機器,所以當我設置headerType=console
時,我無法嘗試會發生什麼情況。該文檔說,這會導致包裝到始終等待並返回應用程序的退出代碼。但是,由於我的應用程序主要是一個GUI應用程序,我不知道這個設置是否有任何負面影響。在這一點上,我開始問自己爲什麼我會希望包裝的應用程序具有比jar文件更多的命令行行爲。