Как я могу создать исполняемый файл JAR с помощью Maven + JavaFX

Я собираюсь создать исполняемый JAR-файл внутри Eclipse IDE. Все мои зависимости от Maven. В Eclipse я создаю графическое приложение JavaFX для рабочего стола.

Проблема в том, что когда я создаю исполняемый файл JAR. Я получил эту ошибку.

Как я могу создать исполняемый файл JAR с помощью Maven + JavaFX

Ошибка очень ясна.

Jar export finished with problems. See details for additional information. Could not find main method from given launch configuration.

Но каков основной метод? Это метод public static void main(String[] args) здесь?

Что мне делать, чтобы решить эту проблему?

package se.danielmartensson.start;

import java.util.Optional;

import javafx.application.Application;
import javafx.application.Platform;
import javafx.fxml.FXMLLoader;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.scene.control.Alert;
import javafx.scene.control.Alert.AlertType;
import javafx.scene.control.ButtonType;
import javafx.stage.Stage;
import se.danielmartensson.concurrency.Measureing;

public class Main extends Application{

    /*
     * Start the start(Stage front)
     */
    public static void main(String[] args) {
        launch(args);
    }

    @Override
    public void start(Stage front) throws Exception {
        front.setOnCloseRequest(e->{
            e.consume();
            askForClosing();
        });
        Parent root = FXMLLoader.load(getClass().getResource("/se/danielmartensson/fxml/front.fxml"));
        Scene scene = new Scene(root);
        front.setScene(scene);
        front.setTitle("JUBSPlotter");      
        front.show();
    }

    private void askForClosing() {
        Alert question = new Alert(AlertType.CONFIRMATION);
        question.setTitle("Closing");
        question.setHeaderText("Do you want to close?");
        question.setResizable(false);
        question.setContentText("Press OK to close.");
        Optional<ButtonType> answer = question.showAndWait();
        if (answer.get() == ButtonType.OK) {
            Measureing.active = false;
            Platform.exit();
        }

    }

}

Взгляните на этот вопрос: Отсутствуют компоненты среды выполнения Maven Shade JavaFX. Просто Eclipse -> Export не сработает, и если вы уже используете Maven, лучшим вариантом будет плагин для тени. В качестве альтернативы, если ваш проект является модульным, вы можете использовать плагин JavaFX-Maven и javafx:jlink, как описано в здесь, раздел «Модульный с Maven».

José Pereda 30.05.2019 20:48

@JoséPeda Спасибо. Теперь это слишком. Я думаю, что я начну с вашего ответа :)

Daniel Mårtensson 30.05.2019 21:20

В сообщении об ошибке говорится, что файл манифеста отсутствует, плагин maven-jar создаст его, если вы используете цель jar:jar.

Martin Spamer 30.05.2019 22:16

@MartinSpamer Как? банка: цель банка? Команда? Куда вводить?

Daniel Mårtensson 30.05.2019 22:23

@MartinSpamer Хорошо! Я помещаю команду «jar:jar» в окно «Сборка Maven» и создаю ее. Но все же я не могу создать файл exe JAR.

Daniel Mårtensson 30.05.2019 22:33

Посмотрите в целевой папке, есть ли файл jar? Если есть, откройте его любым инструментом, который будет открывать zip-файлы, и посмотрите, содержит ли он файл manifest.mf. Убедитесь, что он содержит запись Main-Class с полным именем вашего основного класса.

Martin Spamer 30.05.2019 23:26

@MartinSpamer Да. Теперь я вижу JAR-файл и могу его открыть :) Но, к сожалению, отсутствуют зависимости Maven. Таким образом, файл JAR полон ошибок.

Daniel Mårtensson 30.05.2019 23:29

@MartinSpamer Думаю, я буду использовать сборку Maven вместо jar:jar

Daniel Mårtensson 31.05.2019 00:03

Либо maven-assembly-plugin, либо maven-shade-plugin — правильный способ создать исполняемый файл jar.

khmarbaise 31.05.2019 00:21

@khmarbaise Так как же правильно? Я видел много разных способов создания файлов JAR с помощью maven. Вот почему, на мой взгляд, я думаю, что Maven - это своего рода беспорядок, потому что это не стандартный способ или единственный способ сделать это.

Daniel Mårtensson 31.05.2019 00:29
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
10
1 737
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы должны использовать следующий плагин maven для создания исполняемого файла jar.

<plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-jar-plugin</artifactId>
                <configuration>
                    <archive>
                        <manifest>
                            <mainClass>
                                com.ddlab.rnd.App
                            </mainClass>
                        </manifest>
                    </archive>
                </configuration>
            </plugin>

Это для очень простого проекта, в котором вы хотите узнать, как создать исполняемый файл jar для запуска. Чтобы получить хорошее представление о том, как создать исполняемый файл jar, проверьте эту ссылку на github. https://github.com/debjava/runnableJar Если у вас есть другие библиотеки для использования как часть вашего приложения. Вы должны создать толстый файл jar. Чтобы создать толстый файл jar, вы должны использовать плагин Maven Shade. Найдите ниже ссылку на плагин maven shadow.

https://maven.apache.org/plugins/maven-shade-plugin/

Не сработало, если я добавлю этот код-текст в файл pom.xml.

Daniel Mårtensson 30.05.2019 21:25

Выложите свой pom.xml, позвольте мне проверить, я постараюсь добавить.

Sambit 30.05.2019 21:26

Похоже, что Maven перестал работать на меня. Не могу скачать зависимости...

Daniel Mårtensson 30.05.2019 21:26

Проверьте подключение к Интернету.

Sambit 30.05.2019 21:27

У меня есть интернет ;)

Daniel Mårtensson 30.05.2019 21:28

Измените основной класс, вы добавили вот так com.ddlab.rnd.App. Это из примера, измените свой класс, используя основной метод.

Sambit 30.05.2019 21:31

Ok! Теперь я изменил его на свой основной класс. Все еще не работает из-за того, что maven не загружается. не знаю бывает. Это сработало вчера.

Daniel Mårtensson 30.05.2019 21:48

Проверьте это в офц, возможно, maven не может подключиться, иначе опубликуйте ошибку maven.

Sambit 30.05.2019 21:49

Я проверю это, затем вернусь и дам ответ о результате.

Daniel Mårtensson 30.05.2019 21:51

Теперь Maven работает. Я просто удалил папку .m2. Но я все еще получаю ту же ошибку: «Экспорт Jar завершен с проблемами. См. Подробности для получения дополнительной информации. Не удалось найти основной метод из данной конфигурации запуска».

Daniel Mårtensson 30.05.2019 22:22

@DanielMårtensson Добавил этот плагин maven-jar, снова упакованный, я вижу, что мой основной класс определен в файле manifest.mf в META-INF в упакованном .jar, но все равно получаю ту же ошибку: не удалось найти или загрузить основной класс. Вы решили эту проблему? Какие-нибудь советы?

Wortig 26.03.2021 20:15

Другие вопросы по теме