Javaプログラムのインストーラーをすばやく作成する方法

Javaアプリケーションのインストーラーをすぐに作成する必要はありませんでしたが、独自のアプリケーションを作成するために多くの時間を費やしたくありませんでしたか? 驚くかもしれませんが、そのようなツールはすでに標準のJDK7パッケージに含まれています。



簡単な説明



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スクリプトに追加できます。 これには何が必要ですか?

  1. 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"/>
          
          



    、変数$ {java.sdk}をJDKのルートに設定する必要があります。
  2. 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>
          
          



  3. 展開する:
     <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>
          
          







  4. 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で機能します。



All Articles