Как запустить приложение JavaFX с помощью JDK 11 / Maven / Eclipse IDE - PullRequest
0 голосов
/ 10 июня 2019

Проблема: при запуске приложения JavaFX на основе немодульного проекта Maven (имя проекта = «howdyjfx») из Eclipse IDE возникает следующая ошибка компиляции:

[ERROR] Failed to execute goal org.codehaus.mojo:exec-maven-plugin:1.6.0:java (default-cli) on project howdyjfx: The parameters 'mainClass' for goal org.codehaus.mojo:exec-maven-plugin:1.6.0:java are missing or invalid.

Среда разработки и конфигурация:

  • ОС : Windows 10
  • IDE : Eclipse 2019-03 (4.11.0)
  • Установлен JDK : jdk-11.0.3, это JDK по умолчанию (и только) установлен в рабочей области. Путь сборки проекта - Java SE-11 (JDK-11.0.3). Поскольку Eclipse требует Java 1.8 JRE, jdk1.8.0_211 также установлен на моем компьютере; Eclipse не будет работать без этого.
  • Builder : Все проекты являются немодулярными и компилируются с использованием Maven. Eclipse справляется с этим благодаря встроенной функции m2e.
  • Пом : Вот выдержка из пом:
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.spindotta.jfx11.testbed</groupId>
    <artifactId>howdyjfx</artifactId>
    <version>0.0.1-SNAPSHOT</version>

    <dependencies>
        <!-- https://mvnrepository.com/artifact/org.openjfx/javafx-controls -->
        <dependency>
            <groupId>org.openjfx</groupId>
            <artifactId>javafx-controls</artifactId>
            <version>13-ea+8</version>
        </dependency>

        <!-- https://mvnrepository.com/artifact/org.openjfx/javafx-fxml -->
        <dependency>
            <groupId>org.openjfx</groupId>
            <artifactId>javafx-fxml</artifactId>
            <version>13-ea+8</version>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <!-- http://maven.apache.org/plugins/maven-compiler-plugin/ -->
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.8.0</version>
                <configuration>
                    <source>11</source>
                    <target>11</target>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-source-plugin</artifactId>
                <version>3.0.1</version>
                <executions>
                    <execution>
                        <id>attach-sources</id>
                        <goals>
                            <goal>jar</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
            <plugin>
                <groupId>org.openjfx</groupId>
                <artifactId>javafx-maven-plugin</artifactId>
                <version>0.0.2</version>

                <configuration>
                    <!-- Is this necessary? The 'Run' configuration goals are "clean exec:java" -->
                    <executable>C:\Program Files\Java\jdk-11.0.3\bin\java</executable>

                    <!-- Workaround to short-circuit jdk1.8 which is needed to run Eclipse 
                        but is toxic for jdk11 and higher -->
                    <options>
                        <option>-Djava.library.path=C:\tmp</option>
                    </options>

                    <!-- Main class - is this correct? -->
                    <mainClass>com.spindotta.jfx11.testbed.howdyjfx.HowdyJFX</mainClass>
                </configuration>
            </plugin>
        </plugins>
    </build>

Код приложения:

    public class HowdyJFX extends Application {

         @Override
         public void start(Stage primaryStage) throws Exception {
              final String javaVersion = System.getProperty("java.version");
              final String javafxVersion = System.getProperty("javafx.version");
              final Label l = new Label("Hello, JavaFX " + javafxVersion + ", running on Java " + javaVersion + ".");
              final Scene scene = new Scene(new StackPane(l), 640, 480);
              primaryStage.setScene(scene);
              primaryStage.show();
          }

         public static void main(String[] args) {
             launch();
         }
    }

Приведенная выше конфигурация и код основаны на руководстве «Начало работы» и Sr. Пост Хосе Переды на Github , а также на ответ на подобный вопрос , который был задан в сентябре прошлого года. Однако по какой-то причине я не могу заставить это работать. Это тем более неприятно, потому что я заканчиваю обширную библиотеку элементов управления JFX, которые компилируются без проблем (с использованием как JDK 11, так и JavaFX 11) и прекрасно работают в Scene Builder (за исключением некоторых проблем Scene Builder, которые здесь не актуальны ).

Заранее спасибо за любые полезные предложения!

1 Ответ

0 голосов
/ 12 июня 2019

Конфигурация в файле pom правильная, но спецификация для основного класса в разделе <configuration> в javafx-maven-plugin неверна.Как в руководстве «Начало работы», так и в материале репозитория Github, имя mainClass - ‘ org.openjfx.hellofx.App, которое представляет собой комбинацию <groupId> плюс <artifactId> плюс simple class name.Поскольку <groupId> и <artifactId> для моего проекта - com.spindotta.jfx11.testbed и howdyjfx соответственно, я объединил их с simple class name HowdyJFX.Это было неправильно, потому что проект имеет стандартную конфигурацию Maven source/main/java плюс папку верхнего уровня howdyjfx.Определение howdyjfx/HowdyJFX в качестве mainClass в плагине решило проблему.

Для чего стоит, элементы, указанные в <configuration> для javafx-maven-plugin, являются необходимыми;если вы опустите any, вы получите ERROR.Должно быть возможно указать эти значения в Run configurations -> JRE tab -> VM arguments, хотя мне легче справиться с этим в pom с использованием шаблона.

Спасибо Хосе Переда за разъяснение проблемы с Goalsэто должно быть указано в Run configurations для запуска.

Теперь есть другая проблема.Мне нужно иметь возможность отлаживать приложения JavaFX, которые запускаются способом, предложенным в руководстве Getting Started и Github repo .Я установил точку останова Eclipse в main class HowdyJFX в первой строке, где назначена переменная, чтобы приложение остановилось в этой точке, чего не произошло.Вместо этого приложение работало так, как будто точки останова не было.Эта проблема отличается от рассматриваемой и поднимается в других местах .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...