Java Language
Javaデプロイメント
サーチ…
前書き
Javaアプリケーション、Webアプリケーションなどを「パッケージ化」して、実行するプラットフォームに展開するためのさまざまな技術があります。それらは、単純なライブラリまたは実行可能なJAR
ファイル、 WAR
およびEAR
ファイルから、インストーラおよび自己完結型の実行可能ファイルまであります。
備考
最も基本的なレベルでは、コンパイルされたクラス(すなわち、 ".class"ファイル)またはコンパイルされたクラスを含むディレクトリツリーをコピーすることによって、Javaプログラムをデプロイすることができます。しかし、Javaは通常、次のいずれかの方法でデプロイされます。
JARファイルまたはJARファイルのコレクションを実行するシステムにJARファイルまたはJARファイルのコピーをコピーする。例えば
javac
を使用します。WAR、EARなどのファイルを「サーブレット・コンテナ」または「アプリケーション・サーバー」にコピーまたはアップロードする。
上記を自動化するアプリケーションインストーラを実行します。インストーラーは組み込みJREもインストールすることがあります。
アプリケーションのJARファイルをWebサーバーに配置することで、Java WebStartを使用してアプリケーションを起動できるようにします。
「JAR、WARおよびEARファイルの作成」の例は、これらのファイルを作成するさまざまな方法をまとめたものです。
Java用のオープンソースおよび商用の「インストーラジェネレータ」と「EXEジェネレータ」ツールは数多くあります。同様に、Javaクラスファイルを難読化するためのツール(リバースエンジニアリングをより困難にするため)とランタイムライセンスチェックを追加するためのツールがあります。これらはすべて「Javaプログラミング言語」ドキュメントの対象外です。
コマンドラインから実行可能なJARを作る
jarを作成するには、1つ以上のクラスファイルが必要です。これは、ダブルクリックで実行する場合は、メインメソッドが必要です。
この例では、次のものを使用します。
import javax.swing.*;
import java.awt.Container;
public class HelloWorld {
public static void main(String[] args) {
JFrame f = new JFrame("Hello, World");
JLabel label = new JLabel("Hello, World");
Container cont = f.getContentPane();
cont.add(label);
f.setSize(400,100);
f.setVisible(true);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}
HelloWorld.javaという名前になっています
次に、このプログラムをコンパイルします。
あなたはこれをしたい任意のプログラムを使用することができます。コマンドラインから実行するには、最初のjavaプログラムのコンパイルと実行に関するドキュメントを参照してください。
HelloWorld.classを作成したら、新しいフォルダを作成し、必要なものを呼び出します。
manifest.txtという別のファイルを作成して貼り付けます
Main-Class: HelloWorld
Class-Path: HelloWorld.jar
HelloWorld.classと同じフォルダに置く
コマンドラインを使用して、現在のディレクトリ( cd C:\Your\Folder\Path\Here
on Windows)をフォルダにします。
ターミナルを使用して、フォルダ(Mac cd /Users/user/Documents/Java/jarfolder
)のフォルダに移動します。
それが完了したら、 jar -cvfm HelloWorld.jar manifest.txt HelloWorld.class
と入力し、 jar -cvfm HelloWorld.jar manifest.txt HelloWorld.class
を押します。これにより、指定されたHelloWorld.jarという名前の.classファイルを使用してjarファイル(マニフェストとHelloWorld.classがあるフォルダ内にあります)が作成されます。オプションに関する情報については、構文セクションを参照してください(-mや-vなど)。
これらの手順の後、マニフェストファイルを使用してディレクトリに移動し、HelloWorld.jarを見つけます。
それをクリックすると、 Hello, World
がテキストボックスに表示されます。
JAR、WAR、およびEARファイルの作成
JAR、WARおよびEARファイルの種類は、基本的に "マニフェスト"ファイルと(WARおよびEARファイルの場合)特定の内部ディレクトリ/ファイル構造を持つZIPファイルです。
これらのファイルを作成するための推奨される方法は、それぞれのファイルタイプの要件を「理解」するJava固有のビルドツールを使用することです。ビルドツールを使用しない場合は、IDEの "export"が次に試すオプションです。
( 編集上の注意:これらのファイルを作成する方法の説明は、それぞれのツールのドキュメントに記載されていますので参考にしてください。
Mavenを使用したJARファイルとWARファイルの作成
Mavenを使用してJARまたはWARを作成することは、単に正しい<packaging>
要素をPOMファイルに入れることの問題です。例えば、
<packaging>jar</packaging>
または
<packaging>war</packaging>
詳細については。エントリポイントクラスと外部依存関係に関する必要な情報をmaven jarプラグインのプラグインプロパティとして追加して、 "実行可能"なJARファイルを作成するようにMavenを設定することができます。アプリケーションとその依存関係を単一のJARファイルに結合する "uberJAR"ファイルを作成するためのプラグインもあります。
詳細については、Mavenのドキュメント( http://www.riptinar.com/topic/898 )を参照してください。
Antを使用したJAR、WAR、およびEARファイルの作成
Antビルドツールには、JAR、WAR、EARをビルドするための別々の「タスク」があります。詳細については、Antのドキュメント( http://www.riptinar.com/topic/4223 )を参照してください。
IDEを使用したJAR、WARおよびEARファイルの作成
3つの最も一般的なJava IDEには、すべてデプロイメントファイルを作成するための組み込みサポートがあります。機能性はしばしば「エクスポート」と呼ばれます。
- Eclipse - http://www.riptinar.com/topic/1143
- NetBeans - http://www.riptinar.com/topic/5438
- Intellij-IDEA - エクスポート
jar
コマンドを使用してJAR、WARおよびEARファイルを作成する。
jar
コマンドを使用してこれらのファイルを "手作業で"作成することもできます。正しい場所に正しいコンポーネントファイルを含むファイルツリーを組み立て、マニフェストファイルを作成し、JARファイルを作成するためにjar
を実行するだけです。
詳細は、 jar
コマンドTopic( JARファイルの作成と変更 )を参照してください。
Java Web Start入門
Oracle Javaチュートリアルでは、 Web Startを次のようにまとめています。
Java Web Startソフトウェアは、ワンクリックでフル機能のアプリケーションを起動する機能を提供します。ユーザーは、長時間のインストール手順を経ずに、完全なスプレッドシートプログラムやインターネットチャットクライアントなどのアプリケーションをダウンロードして起動できます。
Java Web Startのその他の利点は、署名付きコードのサポートとプラットフォーム依存性の明示的宣言、およびアプリケーションキャッシュの更新とコードキャッシングのサポートです。
Java Web Startは、JavaWSおよびJAWSとも呼ばれます。主な情報源は次のとおりです。
- Javaチュートリアル - レッスン:Java Web Start
- Java Web Startガイド
- Java Web Start FAQ
- JNLP仕様
-
javax.jnlp
APIドキュメント - Java Web Startデベロッパーサイト
前提条件
Web Startは高レベルで、リモートWebサーバーからJARファイルとしてパックされたJavaアプリケーションを配布することによって機能します。前提条件は次のとおりです。
アプリケーションが実行されるターゲットマシン上の既存のJavaインストール(JREまたはJDK)。 Java 1.2.2以上が必要です。
- Java 5.0以降では、Web StartのサポートはJRE / JDKに含まれています。
- 以前のリリースでは、Web Startのサポートは個別にインストールされていました。
- Web Startインフラストラクチャには、ユーザーが必要なソフトウェアをインストールするのを支援するWebページに含めることができるJavascriptがいくつか含まれています。
ソフトウェアをホストするWebサーバーは、ターゲットマシンにアクセス可能でなければなりません。
ユーザーがWebページ内のリンクを使用してWeb Startアプリケーションを起動する場合は、次のようにします。
- 互換性のあるWebブラウザが必要です
- 近代的な(セキュリティで保護された)ブラウザでは、Webブラウザのセキュリティを損なうことなく、Javaの実行を許可するようにブラウザに指示する方法を伝える必要があります。
JNLPファイルの例
次の例は、JNLPの基本的な機能を説明するためのものです。
<?xml version="1.0" encoding="UTF-8"?>
<jnlp spec="1.0+" codebase="https://www.example.com/demo"
href="demo_webstart.jnlp">
<information>
<title>Demo</title>
<vendor>The Example.com Team</vendor>
</information>
<resources>
<!-- Application Resources -->
<j2se version="1.7+" href="http://java.sun.com/products/autodl/j2se"/>
<jar href="Demo.jar" main="true"/>
</resources>
<application-desc
name="Demo Application"
main-class="com.example.jwsdemo.Main"
width="300"
height="300">
</application-desc>
<update check="background"/>
</jnlp>
ご覧のとおり、JNLPファイルはXMLベースであり、情報はすべて<jnlp>
要素に含まれています。
-
spec
属性は、このファイルが準拠しているJNPL仕様のバージョンを示します。 -
codebase
属性は、ファイルの残りの相対href
URLを解決するためのベースURLを提供します。 -
href
属性は、このJNLPファイルの最終的なURLを示します。 -
<information>
要素には、タイトル、著者、説明、ヘルプ・ウェブサイトなどのメタデータが含まれています。 -
<resources>
要素は、必要なJavaバージョン、OSプラットフォーム、JARファイルなど、アプリケーションの依存関係を記述します。 -
<application-desc>
(または<applet-desc>
)要素は、アプリケーションの起動に必要な情報を提供します。
Webサーバーの設定
Webサーバは、 .jnlp
ファイルのMIMEタイプとしてapplication/x-java-jnlp-file
を使用するように設定する必要があります。
JNLPファイルとアプリケーションのJARファイルは、JNLPファイルで指定されたURLを使用して使用できるように、Webサーバーにインストールする必要があります。
ウェブページからの起動を有効にする
アプリケーションをWebリンク経由で起動する場合は、リンクを含むページをWebサーバー上に作成する必要があります。
Java Web Startがすでにユーザのマシンにインストールされていると仮定すると、Webページにはアプリケーションを起動するためのリンクが含まれている必要があります。例えば。
<a href="https://www.example.com/demo_webstart.jnlp">Launch the application</a>
それ以外の場合、ページには、ユーザーが使用しているブラウザの種類を検出し、必要なバージョンのJavaをダウンロードしてインストールするよう要求するスクリプトも含まれている必要があります。
注:この方法でJavaをインストールすることを奨励したり、JNLP Webページの起動が機能するようにWebブラウザでJavaを有効にすることをユーザーに促すことはお勧めしません。
コマンドラインからWeb Startアプリケーションを起動する
コマンドラインからWeb Startアプリケーションを起動する手順は簡単です。ユーザーにJava 5.0 JREまたはJDKがインストールされていると仮定すると、これを実行するだけです。
$ javaws <url>
<url>
はリモートサーバー上のJNLPファイルのURLです。
アプリケーションとその依存関係のためのUberJARの作成
Javaアプリケーションの一般的な要件は、単一のファイルをコピーすることによって展開できることです。標準のJava SEクラスライブラリのみに依存する単純なアプリケーションでは、(コンパイルされた)すべてのアプリケーションクラスを含むJARファイルを作成することでこの要件を満たします。
アプリケーションが第三者のライブラリに依存している場合は、それほど単純ではありません。依存関係JARファイルをアプリケーションJAR内に置くだけでは、標準のJavaクラスローダーはライブラリクラスを見つけることができず、アプリケーションは起動しません。その代わりに、アプリケーションクラスと関連リソースを依存クラスとリソースとともに含む単一のJARファイルを作成する必要があります。これらは、クラスローダーが検索するための単一の名前空間として編成する必要があります。
このようなJARファイルは、しばしばUberJARと呼ばれます。
"jar"コマンドを使用したUberJARの作成
UberJARを作成する手順は簡単です。 (私は簡単にするためにLinuxコマンドを使用します。コマンドはMac OSでは同じでなければならず、Windowsでも同様です)。
一時ディレクトリを作成し、そのディレクトリに移動します。
$ mkdir tempDir $ cd tempDir
依存するJARファイルごとに、アプリケーションのクラスパスに表示する必要がある順序と逆の順序で、
jar
コマンドを使用してJARを一時ディレクトリに展開します。$ jar -xf <path/to/file.jar>
これを複数のJARファイルに対して行うと、JARの内容がオーバーレイされます。
ビルドツリーからアプリケーションクラスを一時ディレクトリにコピーします。
$ cp -r path/to/classes .
一時ディレクトリの内容からUberJARを作成します。
$ jar -cf ../myApplication.jar
実行可能なJARファイルを作成する場合は、ここで説明するように適切なMANIFEST.MFを組み込みます。
Mavenを使ったUberJARの作成
あなたのプロジェクトがMavenを使用してビルドされている場合は、 "maven-assembly"または "maven-shade"プラグインを使用してUberJARを作成することができます。詳細については、 Mavenアセンブリのトピック( Mavenのドキュメントを参照)を参照してください。
UberJARの利点と欠点
UberJARの利点のいくつかは自明です。
- UberJARは簡単に配布できます。
- ライブラリは自己完結型であるため、UberJARのライブラリ依存関係を解除することはできません。
さらに、適切なツーリングを使用してUberJARを作成する場合は、JARファイルから使用されないライブラリクラスを除外することもできます。しかし、これは通常、クラスの静的分析によって行われます。アプリケーションでリフレクション、アノテーション処理などの手法を使用する場合は、クラスが誤って除外されないように注意する必要があります。
UberJARにもいくつかの欠点があります。
- 同じ依存関係を持つUberJARがたくさんある場合は、それぞれに依存関係のコピーが含まれます。
- いくつかのオープンソースのライブラリはUberJARでの1のため使用できない場合があり 、ライセンスを持っています。
1 - 一部のオープンソースライブラリライセンスでは、ライブラリを使用することができます。エンドユーザーのみが、ライブラリのあるバージョンを別のバージョンに置き換えることができます。 UberJARはバージョン依存性の置き換えを困難にする可能性があります。