web-dev-qa-db-ja.com

EclipseからMavenで構成されたJavaFXアプリケーションを起動する

Mavenで正しく動作するJavaFXアプリケーションがあります。

mvn compile
mvn exec:Java  # Launches the GUI

これはUbuntuで、openjdk-11-jdkmavenopenjfx Ubuntuパッケージを使用しています。

Eclipseからこのアプリケーションをコンパイルして実行したいIDE(EclipseはSudo snap install --classic Eclipseでインストールされています。)m2e(Maven to Eclipse)プラグインをインストールし、プロジェクトをFile -> Import -> Maven -> Existing Maven Projectでインポートしました。 JavaFXプロジェクトでは、m2eプラグインはEclipseでMavenのpom.xmlからプロジェクトを構成するために必要なすべてのことを行います。残念ながら、私の場合、何かが欠けています。型チェックが正しく機能し、javafx.*クラスを見つけますが、アプリケーションを実行しようとすると、コンソールの次のエラーメッセージ:

Error: JavaFX runtime components are missing, and are required to run this application

回避策は、アプリケーションをMavenアプリケーション(Run -> Run As -> Maven Build -> target=exec:Java)として実行することですが、あまり便利でなく、遅いため、アプリケーションをJavaとして直接実行する方法を探しています。 = Eclipseのアプリケーション。

私はEclipseを手動で構成する方法を見つけました(以下の回答として投稿)が、Maven + m2eが完全にジョブを実行できるより良い方法があるかどうか疑問に思っています。つまり、可能な限りpom.xmlからすべてを構成し、すべてがEclipseで「正常に動作」します。

この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/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <groupId>jfxpl</groupId>
  <artifactId>jfxpl</artifactId>
  <version>0.0.1-SNAPSHOT</version>

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

  <build>
    <plugins>
      <plugin>
    <groupId>org.openjfx</groupId>
    <artifactId>javafx-maven-plugin</artifactId>
    <version>0.0.2</version>
    <configuration>
      <mainClass>App</mainClass>
    </configuration>
      </plugin>
      <plugin>
        <groupId>org.Apache.maven.plugins</groupId>
        <artifactId>maven-compiler-plugin</artifactId>
        <version>3.8.0</version>
        <configuration>
          <source>8</source>
          <target>8</target>
        </configuration>
      </plugin>
      <plugin>
    <groupId>org.codehaus.mojo</groupId>
    <artifactId>exec-maven-plugin</artifactId>
    <version>1.5.0</version>
    <configuration>
      <mainClass>App</mainClass>
    </configuration>
      </plugin>
    </plugins>
  </build>
</project>

そして、次のようなJavaFXを使用するアプリケーション:

import javafx.application.Application;
import javafx.stage.Stage;

public class App extends Application {

    @Override
    public void start(Stage stage) throws Exception {
        System.out.println("Start!"); // Or real JavaFX stuff here obviously
    }

    public static void main(String[] args) {
        Application.launch(args);
    }
}
10
Matthieu Moy

Mavenプロジェクトがあるので、使用しているmavenプラグインの目標を使用し、(_m2e_を介して)Eclipseを取得してこれを実行できますが、これらの目標と目的を指定する必要があります実行する構成。

この HelloFX サンプルがあるとします。

あなたのポンは次のようになります:

_<build>
    <plugins>
        <plugin>
            <groupId>org.Apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.8.0</version>
            <configuration>
                <release>12</release>
            </configuration>
        </plugin>
        <plugin>
            <groupId>org.openjfx</groupId>
            <artifactId>javafx-maven-plugin</artifactId>
            <version>0.0.3</version>
            <configuration>
                <mainClass>org.openjfx.hellofx.App</mainClass>
            </configuration>
        </plugin>
    </plugins>
</build>
_

ここでは、_javafx-maven-plugin_の代わりに _exec-maven-plugin_ を使用していますが、使用することもできます。前者はモジュールパスへのJavaFXモジュールの追加を適切に処理しますが、後者はモジュールをまったく使用しません。

端末を使用している場合は、JDK 12を設定して実行します。

_mvn clean javafx:run
_

期待どおりに動作します。

ただし、これをターミナルからではなくEclipseから実行したいので、_Run -> Run Configurations... -> Maven Build_から新しいMavenビルド構成を作成できます。

maven build

_clean javafx:run_を追加し、JREが適切に設定されていることを確認します(たとえば、JDK 12)。適用を押してダイアログを閉じます。

これで、ツールバーまたはコンテキストメニューから_Run as_緑のアイコンをクリックできます。ダイアログが表示され、単純に_Maven Build_オプションを選択できます。

OKを押すと、期待どおりに目標が実行されます。

実行構成を作成していない場合、Mavenビルドを選択すると、構成を作成して必要な目標を指定するように求められます。つまり、Eclipseは、実行ボタンをクリックしたときに、pomで実行したい目標のうち、実行したいものを推測しません。

または、ドロップダウンアイコンを押して、カスタム構成を示すダイアログを開くこともできます。

Run hellofx configuration

hellofxを押すと、指定した目標が実行されます。

最後に、Mavenのようなビルドツールの利点がなくても、プロジェクトを_Java Application_として実行できます。VM引数を追加する必要があります(つまり、ダウンロードする必要があります answer のように、最初にJavaFX SDKを使用します。次に、同じドロップダウンボタンからこの他の構成(私の場合は_hellofx2_)を実行できます。

このすべてが詳細に文書化されていることに注意してください here

2
José Pereda

Linux用のOpenJDKには、JAVAFXフレームワークが付属していません。ダウンロードしてインストールする必要があります。

Sudo apt-get install openjfx

インストール後、次の手順を使用します。

Set the SDK first

ステップ1:

GOTO File -> Project Structure -> Modules -> Dependency >> + [on left-side of window] click + sign

ステップ2 :

Run >> Edit Configurations

ステップ3:VM configに以下のパラメーターを追加します:

--module-path /path/to/JavaFX/lib --add-modules=javafx.controls
1
Akash

1つの解決策は、Eclipseを手動で構成して必要なモジュールを追加することです:Run -> Run configurations -> Java Application -> Arguments -> VM Arguments、add --module-path /path/to/JavaFX/lib --add-modules=javafx.controls

VM Arguments configuration

他のモジュールが必要な場合は、--add-modules javafx.controls,javafx.fxmlのようなコンマ区切りのリストとして指定します。

0
Matthieu Moy

これは重複している可能性があります。これを試しましたか

<plugin>
<groupId>com.zenjava</groupId>
<artifactId>javafx-maven-plugin</artifactId>
<version>8.8.3</version>
<configuration>
    <mainClass>your.main.class.which.extends.javafx.Application</mainClass>
</configuration>
</plugin>

ここに提供: EclipseでMavenを使用したJavaFXアプリケーション

また、そのためのドキュメントがあり、おそらくJava 11。

https://openjfx.io/openjfx-docs/

ドキュメントから提供されているOpenJFXリリースを以下に示します。

https://gluonhq.com/products/javafx/

また、

https://openjfx.io/openjfx-docs/images/ide/Eclipse/modular/maven/Eclipse05.png

Mavenによるビルドの素晴らしいイメージです。

0
Joe