簡単な説明
javafxpackagerは、JavaFXを使用して記述されたプログラムからパッケージを作成するように設計されたユーティリティです。 作成後しばらくして、オラクルは同じユーティリティで純粋にJavaで記述されたプログラムのパッケージも作成できると判断しました。 彼らは名前を変えないことに決めました。
入り口で何が出されますか? コンパイル済みのソースを含むディレクトリと、コンパイル済みのjarの両方を送信できます。 次に、jarがJREにパッケージ化され、まだインストールされていないjavaでユーザーにこれを送信できます。 これにより、ユーザーに強制的にJREをインストールさせないようにすることができます。 それで、それを使う方法は?
使用例
何らかの種類のHelloWorldプロジェクトがあるとします。helloworldサブディレクトリとHelloWorld.javaを含むsrcディレクトリのみです。
package helloworld; public class HelloWorld { public static void main (String[] args) { System.out.println ("Hello, world!"); } }
ルートは最も単純なant'ovy build.xmlであり、クラスファイルのみを収集できます。
<?xml version="1.0" encoding="UTF-8"?> <project name="Generic" default="compile" basedir="."> <target name="compile"> <mkdir dir="build/classes"/> <javac srcdir="src" destdir="build/classes" executable="${java.sdk}/bin/javac"/> </target> </project>
それでは、プロジェクトを組み立てましょう。
$ ant compile
javafxpackagerを使用して、jarを収集できます(distディレクトリを作成した後)。
$ javafxpackager -createjar -srcdir build/classes -outfile dist/HelloWorld.jar -appclass helloworld.HelloWorld
作成されたjarの内容を見ると、作成された標準とは多少異なることがわかります。
$ unzip -l dist/HelloWorld.jar Archive: dist/HelloWorld.jar Length Date Time Name --------- ---------- ----- ---- 0 2013-04-29 15:50 META-INF/ 158 2013-04-29 15:50 META-INF/MANIFEST.MF 0 2013-04-29 15:50 helloworld/ 353 2013-04-29 15:50 helloworld/HelloWorld.class 0 2013-04-29 15:50 com/ 0 2013-04-29 15:50 com/javafx/ 0 2013-04-29 15:50 com/javafx/main/ 2671 2013-04-29 15:50 com/javafx/main/Main$1.class 5633 2013-04-29 15:50 com/javafx/main/NoJavaFXFallback.class 19218 2013-04-29 15:50 com/javafx/main/Main.class 1747 2013-04-29 15:50 com/javafx/main/Main$2.class --------- ------- 29780 11 files
解凍してMANIFEST.MFを開くと、包含方法も標準の方法とはわずかに異なることもわかります(JavaFXで一般的です)。
Manifest-Version: 1.0 JavaFX-Version: 2.2 JavaFX-Application-Class: helloworld.HelloWorld Created-By: JavaFX Packager Main-Class: com/javafx/main/Main
次に、パッケージの作成に進みましょう。 デフォルトでは、deployディレクティブは組み込みプラグインを使用してjnlpとhtmlのみを作成します。
ただし、-native allディレクティブを指定すると、このオペレーティングシステムに固有のパッケージが作成されます:Linuxのdebとrpm(それぞれのパッケージにdpkgまたはrpmbuildを含むもの)、Windowsのexeとmsi(残念ながら、制限があり、次のユーティリティをインストールする必要があります:Inno Setup for exe and WiX Toolset for msi)およびapp with dmg with MacOS X.ネイティブパッケージをすぐに作成しましょう(既にjarを作成しているはずです):
$ javafxpackager -deploy -v -srcdir dist -outdir dist -outfile HelloWorld -appclass helloworld.HelloWorld -native all
この後、しばらくの間アセンブリが行われます。 distディレクトリにさまざまなバンドルが登場しました:2つのバンドル(異なるOS向け-異なる)と1(本質的にはアンパックされたパッケージ):HelloWorldディレクトリ。HelloWorldバイナリがあり、すぐに結果が得られます:
こんにちは世界!
このコードは、既にパッケージ化されているJREディレクトリから始まります。
また、パッケージは既にインストールできます。
しかし、そのようなアセンブリをプロジェクトに追加する方法は?
2つの方法があります。同じjavafxpackagerを使用して、たとえばexec'aを使用して、たとえばant-scriptsに追加できます。 しかし、あなたはそれをもっともっとクールにできます。 javaパッケージにはant-javafx.jarパッケージも含まれています。これにより、これらすべてをAntスクリプトに追加できます。 これには何が必要ですか?
- ant-javafxサポートの追加:プロジェクトxmlツリーのルート要素にパラメーターを設定します
xmlns:fx = "javafx:com.sun.javafx.tools.ant"
、そして彼の体に追加します
<taskdef resource="com/sun/javafx/tools/ant/antlib.xml" uri="javafx:com.sun.javafx.tools.ant" classpath=".${path.separator}${java.sdk}/lib/ant-javafx.jar"/>
- jar:
<fx:jar destfile="dist/HelloWorld.jar"> <fx:application name="HelloWorld" mainClass="helloworld.HelloWorld" /> <fx:fileset dir="build/classes" /> <fx:manifest> <fx:attribute name="Implementation-Vendor" value="meAndMyCompany"/> <fx:attribute name="Implementation-Title" value="HelloWorld"/> <fx:attribute name="Implementation-Version" value="1.0"/> </fx:manifest> </fx:jar>
- 展開する:
<fx:deploy width="100" height="100" nativeBundles="all" outdir="dist" outfile="HelloWorld"> <fx:application name="HelloWorld" mainClass="helloworld.HelloWorld"/> <fx:resources> <fx:fileset dir="dist" includes="*.jar"> </fx:resources> <fx:info title="HelloWorld" vendor="myAndMyCompany"/> </fx:deploy> </pre>
docs.oracle.com/javafx/2/deployment/javafxpackager001.htm-javafxpackagerのドキュメント
docs.oracle.com/javafx/2/deployment/javafx_ant_task_reference001.htm-antaskタスクのドキュメント
docs.oracle.com/javafx/2/deployment/self-contained-packaging.htm-追加情報
UPD:ここで機能しないと指定されているものはすべて、最新バージョンのJDKで機能します。