2017-05-20 7 views
4

3つのモジュールuser,deptおよびaccountのサンプルアプリケーションを作成しています。私のユーザモジュールでは、私は、メインクラスを持っているし、次のコマンドを使用して、私のモジュールをコンパイル:Java 9:JLinkが無効な画像を作成しました - モジュール実行可能スクリプトがありません

コンパイル後、実行のために以下のコマンドを実行します。javaモジュールを実行した後

java -p target -m com.user/com.user.info.Launcher 

出力は成功しています。しかし、jlinkを使用してランタイムイメージを作成しようとすると、イメージは正常に作成されましたが、モジュール実行可能スクリプトはそこにありません。画像を作成するために、私は次のコマンドを使用しています:

jlink --module-path $JAVA_HOME/jmods:target --add-modules com.user --output my-app 

で、ランタイムイメージ、私はbinディレクトリを持っていますが、このディレクトリは唯一javakeynoteスクリプトが含まれています。私は、私のアプリケーションを実行するために、ユーザーのメインクラスのスクリプトも期待しています。以下のように

私のJavaバージョン:

java version "9-ea" 
Java(TM) SE Runtime Environment (build 9-ea+165) 
Java HotSpot(TM) 64-Bit Server VM (build 9-ea+165, mixed mode) 

どのように私はこの問題を解決することができますか?

+0

Afaik 'jlink'は実行可能ファイルを作成しません。これは、必要なモジュールだけを持つVMのランタイムイメージを作成するだけです。 –

+0

しかし、open jdkに記載されている挨拶のサンプルでは、​​挨拶のスクリプト –

+0

が表示されている場所をリンクできますか?私はここには表示されません:http://openjdk.java.net/projects/jigsaw/quick-start –

答えて

8

jlinkは、必要なモジュールのみを含むランタイムVMイメージを作成します。

--add-modules com.userと指定されているので、画像にはcom.userモジュールとそれが(直接的または間接的に)依存するすべてのモジュールが含まれます。

あなたは、生成された画像のbinフォルダにjavaバイナリを使用して、コマンドを使用して、アプリケーションを実行することができます。

java com.user.info.Launcher 

あなたはまた--launcher <command>=<module>/<main>を使用して、ランチャースクリプトを生成jlink持つことができますオプション。あなたのケースでは、あなたのような何かを行うことができます:

jlink --module-path $JAVA_HOME/jmods:target --add-modules com.user --output my-app --launcher launch=com.user/com.user.info.Launcher 

を、その後、あなただけのアプリケーションを実行するためにbinディレクトリからlaunchを使用することができます。

+0

Thanks @Jorn、Java always rocks –

+4

@HarmeetSinghTaaraあなたが描いているものが見つかりました。いくつか試してみたところ、 '--launcher'オプションがあり、' jlink'で起動スクリプトを生成していました。私は答えにいくつかの情報を加えました。 –

関連する問題