2016-04-11 10 views
4

私はJavaFXでアプリケーションを作成しています。ネイティブに展開する.EXEファイルのサイズについて懸念しています。私が持っているアプリケーションはそれほど大きくはない(合計で5M未満)が、Javaランタイムは最終的にインストールされたディレクトリを100M以上も上回って、44Mの別のファイルに圧縮しています。ネイティブに配備されたJavaFXアプリケーションのサイズを小さくする

私は64ビットWindows(Java SE 8u77)でテストを行っています。小さな最終的には実行可能にするために私はここに概説されているよう不要なJREの部分を削除しました:

配布可能な.EXEをさらに小さくする方法はありますか?私が見つけたすべての情報は、少なくとも2〜3歳であり、おそらくそれほど関連性がないかもしれません。私は、JREから出ることができるものがたくさんあるように感じていますが、それはライセンスに違反するようです。

JavaFXアプリケーションを小さくするためにOracle以外のディストリビューションやその他の方法を使用したことがある人はいますか?

答えて

-2

これに最適なツールの1つはProguardです。

は、実行可能

+0

あなたは何をお勧めしますか?私のアプリケーションに対してProguardを実行するだけでは、Java Runtimeと比べて非常に小さいため、無意味です。誰でもJava Runtimeを縮小した経験はありますか?ライセンスに関する限り、これは合法ですか? –

+0

現在、JREを削除することはライセンス契約に違反しています。 Java 9(プロジェクトジグソーパズル)では可能です。 –

+0

Java 9は1年先です。これに対処するために今日できることはありますか? –

3

javapackagerを使用している場合、あなたはJREが含まれないように設定することができますを生成する前に、それを通して、あなたのプログラムを実行します。これにより、ネイティブランチャーはローカルインストールされたJREを使用します(これは最善の解決策ではありません)。

JavaFXの-のmaven-プラグインを使用する場合は、あなただけのbundlerArgumentを設定する必要があります。

jfx { 
    verbose = true 
    mainClass = 'your.application.appname' 
    appName = 'appname' 
    jfxMainAppJarName = 'appname.jar' 
    vendor = "My Company" 
    bundleArguments = [ 
     runtime: null 
    ] 
} 

<configuration> 
    <mainClass>com.zenjava.test.Main</mainClass> 
    <bundleArguments> 
     <runtime /> <!-- dont include JRE, use installed one --> 
    </bundleArguments> 
</configuration> 

JavaFXの-のGradle-プラグインを使用して、単にNULLとして実行時設定

javapacker自体のアリスタイルのXMLファイルを使用する場合は、ちょうどこの設定:

<fx:bundleArgument name="runtime" value="" />

免責事項:私はjavafx-maven-pluginのメンテナーで、javafx-gradle-pluginの作成者です。

+0

私はこのオプションに注意しましたが、解決方法よりもはるかに多くの問題が発生しないことをまだ理解していません。誰かが適切なJVMを持たずにインストールしようとするとどうなりますか?私はそれが可愛くないと思っています。あらかじめ何をするかを説明する(たとえば、このバージョンのJavaをインストールする)ことは、ドキュメントの悪夢です。そして、それは普通の人に「Java」と言っているだけで、「それはあまりにもセキュリティ上の問題だから」と気になってしまったという私の経験でした。 –

+0

@SanderSmithはい、それは本当です。一部の人は、[JWrapper](http://www.jwrapper.com/)をそれらの間の(有料)解決策として使用しています。代わりに、[Launch4J](http://launch4j.sourceforge.net/)を試してみてください。すべてが共通して、バンドルの中にJREを組み込むことができます。既存のjavapackagerをlaunch4j-bundlerと組み合わせることも可能です(mavenの場合は、1つのlaunch4j、特別な設定の2つのjavafx-maven-plugin)。 – FibreFoX

+1

@SanderSmithあなた自身で解決しなければならない質問が1つあります。ユーザーがインストールしたJREに依存しているのですか、バンドルの中に独自のJREを提供することでJavaの恐怖のユーザーから離れてバグ修正のセキュリティリスク)。私は個人的に第二の選択肢がある傾向があります。なぜなら、「異なるJREの振る舞い」に対処する必要がないからです。振る舞いを再現するほうがいいからです。アップデートするには:;)一部のユーザーはソフトウェアに関するより良い気持ちを持っていることが多く、アップデートを取得することがあります。 – FibreFoX

関連する問題