私はSpringブートgradleプラグイン(org.springframework.boot
)を使って "one" jarを生成しています。 java -jar app.jar
を実行するとうまく動作します。ただし、このアプリケーションはJNI経由でApache Commons Daemonを使用してデーモンとして実行する必要があります。このアプリケーションの以前のバージョンは自家製のフレームワークの上に構築されました。私はstart
とshutdown
メソッドをデーモンの設定で指定できるメインクラスに持っていました。Springブートで生成された1つのjarにJNIフックを追加するには
メインクラスがorg.springframework.boot.loader.JarLauncher
になり、start
とshutdown
メソッドがどこにでも実装されていないか、superclassesになっています。 launch
メソッドがありますが、私はそれがjava -jar
でjarファイルを実行するためにしか動かないと思います。ここで
は逆コンパイル1瓶のGradleのプラグインや内容によって生成されたマニフェストファイル(編集済み)である:
Manifest-Version: 1.0
Start-Class: com.company.myapp.Application
Spring-Boot-Classes: BOOT-INF/classes/
Spring-Boot-Lib: BOOT-INF/lib/
Spring-Boot-Version: 1.5.6.RELEASE
Main-Class: org.springframework.boot.loader.JarLauncher
私の質問は次のようになります。私は追加するには、このGradleのプラグインを設定することができますJNIは私のアプリのメインクラスを正しく動かすようにメソッドをフックしますか?私はGradleが "uber" jarを作るためのShadowプラグインがあることを知っています。また、 "uber" jarを作成してlib/
ディレクトリ(デスクトップアプリケーション)に配布することもできません。しかし、Spring Bootの開発者がそれについて考えていて、これを行う方法がある場合、私はむしろそれを使用したいと思います。
返信いただきありがとうございます@SlaterCodes。私はまだこのソリューションを試してみる必要があります。しかし、アプリケーションを正しくシャットダウンすることも重要です。私たちが行った解決策は、 'lib /'フォルダを持つ小さな瓶です。 SpringのJarLauncherを使わずに直接アクセスできるので、フックを管理する方が簡単でした。 –
@SergePoeleはメモに感謝しています。私はこれをやり直して、より多くのプロダクションを準備しています。私はちょうど誰かがそれを少なくとも機能的にしたいと思った場合に答えることを望みました – SlaterCodes