5

javafx アプリケーションのインストーラーを作成するために、チュートリアルに従いました。そして、期待どおりにインストーラーが作成されます。

作成するディレクトリ構造は次のとおりです。

マイアプリ

  +app

  +runtime

  +MyApp.exe

  +MyApp.ico

ランタイムには Java ランタイムが含まれています。しかし、問題は、アプリケーションが Java プロセスを作成し、java.exe のパスを必要とすることです。ただし、上記のフォルダー ランタイムを参照すると、java.exe が含まれていません。

すなわち

ランタイム

+jre

    +bin

         +java.dll

          missing java.exe

java.exe のパスを取得して、それを使用して他の Java プロセスを開始するにはどうすればよいですか。または、Javaプロセスをどのように開始しjava.dllますか?

PS:このリンクでは同じ質問について説明していますが、回答はしていません。

4

1 に答える 1

4

Oracle Java Deployment Team によるアプリケーション バンドルの微調整に関するネイティブ パッケージング クックブックには、自己完結型アプリケーションに含まれる JRE の部分をカスタマイズする方法が記載されています。

元のリンクが無効になった場合に備えて、ここに関連するセクションをコピーして貼り付けます。

パッケージ ツールを使用してインストール可能なパッケージを生成している場合は、インストーラーにラップする前にアプリケーション イメージを微調整する必要がある場合があります。なんで?たとえば、アプリケーションに署名して、OS から信頼されていないように見せたい場合があります (たとえば、Mac OS X Gatekeeper を喜ばせるため)。

また、デフォルトでは、自己完結型アプリケーションには Java ランタイムの完全なコピーは含まれていません。必須コンポーネントのセットのみを含めます。このアプローチが採用された理由の 1 つは、パッケージ サイズを小さくしたいということです。ただし、アプリケーションがこれらのオプション コンポーネントに依存する場合があり、その場合、それらをプライベート ランタイムに追加する方法が必要になります。たとえば、jre/lib/ext/sunjce_provider.jar がない場合、https 接続は機能しません。

現在、これは、アプリケーション イメージが読み込まれた後に実行されるカスタム構成スクリプトを提供することで実現できます。上記のアイコンの例のように、詳細出力を有効にしてスクリプト ファイルの名前を検索し、それをパッケージ ツールが検索する場所にドロップする必要があります。スクリプト言語もプラットフォーム固有であることに注意してください。現在、Mac/Linux のシェルと Windows の Windows Script のみをサポートしています。

アプリケーション イメージの場所をどのように見つけますか? 現在、カスタム スクリプトは構成ファイルが保存されているディレクトリで実行されますが、アプリケーション イメージにはプラットフォーム固有の相対パスを使用してアクセスできます。このパスは詳細出力から取得するか、環境変数 JAVAFX_ANT_DEBUG を true に設定して中間ビルド アーティファクトを保持することで取得できます。

これは、Windows プラットフォーム上の MyApp のアプリケーション パッケージに jre/lib/ext/sunjce_provider.jar を追加するために使用できるサンプル スクリプト (John Petersen による寄稿) です。Javascript を使用してスクリプトを作成しますが、Windows スクリプトには VBScript を使用することもできます。

<?xml version="1.0" ?>  
<package>  
   <job id="postImage">  
    <script language="JScript">  
     <![CDATA[  
        var oFSO = new ActiveXObject("Scripting.FileSystemObject");  
        var oFolder = oFSO.getFolder(".");  
        var from = oFolder.path + "\\MyApp\\app\\sunjce_provider.jar";  
        var to = oFolder.path + "\\MyApp\\runtime\\jre\\lib\\ext";  
        if (!oFSO.FolderExists(to)) {  
          oFSO.CreateFolder(to);  
        }  
        to += "\\";  
        oFSO.CopyFile(from, to);  
     ]]>  
    </script>  
   </job>  
</package> 

上記sunjce_provider.jarでは、JRE インストールからアプリケーション バンドルにファイルをコピーする方法について説明しましたが、その他のファイルをコピーする手順java.exeも同様です。

カスタマイズするバンドルを最初に作成する方法の詳細については、JavaFX Deployment Guideを参照してください。

于 2013-05-22T05:53:50.377 に答える