出力ジャーに直接のJavaFX SDKをバンドルするには?

マーティン:

それはそうのようなJavaFXのライブラリを検索するための私のプログラムを起動するときに現在、私は、JVM引数を使用しています:

java -javaagent:lib/aspectjweaver-1.9.5.jar -javaagent:lib/spring-instrument-5.2.3.RELEASE.jar --module-path lib/javafx-sdk-13.0.2/lib --add-modules=javafx.controls -jar target/Some_Service-1.0.jar

私のpom.xmlのプラグインセクションは非常に簡単です。別に私はこれだけを持ってドッカーとLaunch4jプラグインから:

<plugin>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-maven-plugin</artifactId>
    <executions>
        <execution>
            <goals>
                <goal>repackage</goal>
            </goals>
        </execution>
    </executions>
</plugin>

瓶の右(JavaFXのライブラリとAspectJの/春の楽器Javaエージェントが含まれている)その全体のlibディレクトリをバンドルするMavenを伝える方法はありますか?これを行うと、周りのどこにでも、私は私のアプリを展開することのlibフォルダを運ぶために持っていることの問題を解決するだろう!ありがとう!

****** ****** EDIT

私はオプションのプラグインMavenの春ブーツで周りめちゃめちゃ残念ながら、私のjarファイルは、まだ私のフォルダが含まれていません。

<plugin>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-maven-plugin</artifactId>
    <configuration>
        <folders>
            <folder>lib</folder>
        </folders>
        <agent>lib/aspectjweaver-1.9.5.jar</agent>
        <agent>lib/spring-instrument-5.2.3.RELEASE.jar</agent>
    </configuration>
    <executions>
        <execution>
            <goals>
                <goal>repackage</goal>
            </goals>
        </execution>
    </executions>
</plugin>

****** EDIT 2 ******

私はちょうどあなたの代わりに、実行時にプログラム的にそれらをロードすることによって完全に-javaagentパラメータを不要にする素晴らしいライブラリを見つけました。それはすべてのそれはあまりにも必要とされた私のクラスパス上にAspectJと春インストゥルメントの存在そのもののように見えます!それをチェックアウト:https://github.com/subes/invesdwin-instrumentを

私は今、必要なのは、何らかの形で外部からのコマンドライン引数を使用して、それを参照するのではなく、私の瓶にJavaFXのランタイムをバンドルすることです。

なスロー:

代わりのJavaFX SDKを使用しての、自分の中でのJavaFXへの依存を宣言しpom.xmlたファイル。次に、あなたが使用することができますMavenのシェード・プラグインを実行可能な脂肪/ユーバーのJARを作成します。適切なJavaFXのJARファイル(例えば、グラフィックスJARファイル)は、Mavenの中央からダウンロードし必要に応じて、埋め込みプラットフォーム固有の(例えば、ユーザのホームディレクトリに)実行時に抽出されるネイティブコードを。

ここでは、最小限の例です:

Launcher.java

package com.example;

import javafx.application.Application;

public class Launcher {

  public static void main(String[] args) {
    Application.launch(App.class, args);
  }
}

App.java

package com.example;

import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.Label;
import javafx.scene.layout.StackPane;
import javafx.stage.Stage;

public class App extends Application {

  @Override
  public void start(Stage primaryStage) {
    StackPane root = new StackPane(new Label("Hello, World!"));
    primaryStage.setScene(new Scene(root, 500, 300));
    primaryStage.show();
  }
}

pom.xml

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.example</groupId>
    <artifactId>javafx-uber-jar</artifactId>
    <version>1.0</version>

    <properties>
      <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
      <maven.compiler.source>13</maven.compiler.source>
      <maven.compiler.target>13</maven.compiler.target>
    </properties>

    <build>
      <plugins>

        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-compiler-plugin</artifactId>
          <version>3.8.1</version>
          <configuration>
              <release>13</release>
          </configuration>
        </plugin>

        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-shade-plugin</artifactId>
          <version>3.2.2</version>
          <executions>
            <execution>
              <phase>package</phase>
              <goals>
                <goal>shade</goal>
              </goals>
              <configuration>
                <transformers>
                  <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
                    <mainClass>com.example.Launcher</mainClass>
                  </transformer>
                </transformers>
              </configuration>
            </execution>
          </executions>
        </plugin>

      </plugins>
    </build>

    <dependencies>
      <dependency>
        <groupId>org.openjfx</groupId>
        <artifactId>javafx-controls</artifactId>
        <version>13.0.2</version>
      </dependency>
    </dependencies>

</project>

コマンドライン:

mvn package

上記作成され、プラットフォーム固有のユーバーJARを。参照してくださいこの回答クロスプラットフォームのユーバーのJARを作成する方法についてのアイデアを。

あなたがあなたのアプリケーションを開発するために使用しているJavaのバージョンによっては、あなたがに見ることができるjlink(ジャワ9+)および/またはjpackage脂肪/ユーバーのJARファイルを作成するための代替案として(Javaの14、早期アクセス)。あなたがそれらのいずれかを使用する場合は、使用を検討してJMODの(可能なのJavaFXのファイルをここで見つける(すなわち無抽出)、それはよりよいネイティブコードを処理するためにカスタムイメージを設定して)。


メインクラスがのサブクラスではないことに注意してくださいApplicationこれは、上のJavaFXライブラリを置くアプリケーションのために必須であるクラスパス少なくともJavaFXの9-13のために、。この要件の理由は、JavaFXアプリケーションは、mainメソッドを持っていないすることができ、実装に関係しています。場合はjavafx.graphics、モジュールが上ではないのModulePathは「JavaFXのコンポーネントが欠落している」ことを想定しています。メインクラスとするときそれが発生しApplicationたクラスは、それゆえに上記回避策は、同じです。

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=13183&siteId=1