Intellij Idea下的Javafx Maven部署 [英] Javafx maven deployment under Intellij Idea

查看:84
本文介绍了Intellij Idea下的Javafx Maven部署的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我在Intellij Idea Editor下有一个基于Maven的项目.我正在使用javafx-maven-plugin. 我的目标是将我的项目部署为EXE或MSI可安装文件. 由于这是第一次使用maven,请plz帮助我为pom.xml文件进行正确的配置.还是有除Maven之外的其他简便方法可以帮助我实现自己的目标,所以,请毫不犹豫地提及它.

I have a maven based project under Intellij idea Editor. I'm using javafx-maven-plugin. My goal is to deploy my project as EXE or MSI installable file. Since this the first time using maven, plz help me to make a correct configuration for pom.xml file. Or is there another way easy than maven that can help me acheive my Goal, So, don't hesitate to mention it.

所以,这是我的pom.xml

So, this my pom.xml

 <?xml version="1.0" encoding="UTF-8"?>
<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>com.abdo.EntrepriseLimted</groupId>
    <artifactId>EntrepriseLimited</artifactId>
    <packaging>jar</packaging>
    <version>1.0-SNAPSHOT</version>
    <name>ENTREPRISELIMITED</name>
    <url>http://maven.apache.org</url>

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>

                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>

                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-surefire-plugin</artifactId>
                <configuration>
                    <skipTests>true</skipTests>
                </configuration>
            </plugin>

            <plugin>
    <groupId>com.zenjava</groupId>
    <artifactId>javafx-maven-plugin</artifactId>
    <version>8.2.0</version>
    <configuration>
        <mainClass>MainApplication</mainClass>
        <verbose>true</verbose>
        <vendor>Abdo</vendor>
    </configuration>
    <executions>
        <execution>
            <!-- required before build-native -->
            <id>create-jfxjar</id>
            <phase>package</phase>
            <goals>
                <goal>build-jar</goal>
            </goals>
        </execution>
        <execution>
            <id>create-native</id>
            <phase>package</phase>
            <goals>
                <goal>build-native</goal>
            </goals>
        </execution>
    </executions>
</plugin>


        </plugins>

        <resources>
            <resource>
                <directory>${project.basedir}/src/main/resources/fxml</directory>
            </resource>
            <resource>
                <directory>${project.basedir}/src/main/resources</directory>
            </resource>
        </resources>

    </build>
    <dependencies>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
        </dependency>

        <dependency>
            <groupId>org.controlsfx</groupId>
            <artifactId>controlsfx</artifactId>
            <version>8.40.10</version>
        </dependency>
        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-core</artifactId>
            <version>5.1.0.Final</version>
        </dependency>
        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-annotations</artifactId>
            <version>3.5.6-Final</version>
        </dependency>
        <dependency>
            <groupId>org.postgresql</groupId>
            <artifactId>postgresql</artifactId>
            <version>9.4-1206-jdbc42</version>
        </dependency>
        <dependency>
            <groupId>org.jfxtras</groupId>
            <artifactId>jfxtras-labs</artifactId>
            <version>8.0-r4</version>
        </dependency>
        <dependency>
            <groupId>org.jfxtras</groupId>
            <artifactId>jfxtras-controls</artifactId>
            <version>8.0-r4</version>
        </dependency>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-api</artifactId>
            <version>1.7.16</version>
        </dependency>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-log4j12</artifactId>
            <version>1.7.16</version>
        </dependency>
    </dependencies>
</project>

使用com.zenjava:javafx-maven-plugin:jfx-jar执行此pom.xml之后. 我得到了显示此结果的结果:

After executing this pom.xml using com.zenjava:javafx-maven-plugin:jfx-jar. I get this result showing this result :

Results :

Tests run: 1, Failures: 0, Errors: 0, Skipped: 0

[INFO] 
[INFO] --- maven-jar-plugin:2.3.2:jar (default-jar) @ EntrepriseLimited ---
[INFO] Building jar: D:\Projects\6.Project SI limted\2 nd iteration\2. Object Oriented design\target\EntrepriseLimited-1.0.jar
[INFO] 
[INFO] <<< javafx-maven-plugin:8.2.0:jar (default-cli) @ EntrepriseLimited <<<
[INFO] 
[INFO] --- javafx-maven-plugin:8.2.0:jar (default-cli) @ EntrepriseLimited ---
[INFO] Building JavaFX JAR for application
[INFO] Adding 'deploy' directory to Mojo classpath: D:\Projects\6.Project SI limted\2 nd iteration\2. Object Oriented design/src/main/deploy
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 24.316s (Wall Clock)
[INFO] Finished at: Tue Mar 01 13:04:24 WAT 2016
[INFO] Final Memory: 25M/226M
[INFO] ------------------------------------------------------------------------

Process finished with exit code 0

该项目似乎已成功部署,但: 在目标目录下 双击文件后,我得到文件名"EntrepriseLimited-1.0.jar". 在target/jfx/下我得到EntrepriseLimited-1.0-jfx.jar 在target/jfx/lib下,我看到了相关性.双击文件"ntrepriseLimited-1.0-jfx.jar"后,效果不佳.

It seems that the project was successfully deployed but: under target directory i get a file name "EntrepriseLimited-1.0.jar", after double click the file not works. under target/jfx/ i get EntrepriseLimited-1.0-jfx.jar under target/jfx/lib i see the dependencies. after double clicking the file "ntrepriseLimited-1.0-jfx.jar" it not works as well.

这是主要的应用代码:

public class MainApplication extends Application {
    private Stage primaryStage = null;

    @Override
    public void start(Stage primaryStage) throws Exception {

        this.primaryStage = primaryStage;
        buildMainWindow();

    }

    private void buildMainWindow() {
        FXMLLoader loader = new FXMLLoader();
        Parent parent = new AnchorPane();
        System.out.println(getClass().getResource(""));
        loader.setLocation(getClass().getResource("fxml/mainWindow.fxml"));
        loader.setRoot(parent);
        try {

            parent = (AnchorPane) loader.load();

        } catch (IOException e) {
            e.printStackTrace();
        }


        Scene sc = new Scene(parent);
        primaryStage.setScene(sc);

        primaryStage.centerOnScreen();
        primaryStage.show();
    }



    public void setPrimaryStage(Stage stage) {
        this.primaryStage = stage;

    }

    public Stage getPrimaryStage() {
        return primaryStage;
    }

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

}

她是mainWindow的控制器,在其中我根据用户打开新窗口 动作:

And her is the controller for mainWindow where i open new windows, based on user Action:

public class MainWindowController implements Initializable {

    // Tabbed pane
    @FXML
    private TabPane tbTabPaneHome;


    @Override
    public void initialize(URL location, ResourceBundle resources) {

    }

     private void createTab(String title, AnchorPane parent) {
        Tab tab = new Tab(title);
        for (Tab child : tbTabPaneHome.getTabs()) {
            if (child.getText().equals(title)) {
                tbTabPaneHome.getSelectionModel().select(child);
                return;
            }
        }
        tab.setContent(parent);
        tbTabPaneHome.getTabs().addAll(tab);
        tbTabPaneHome.getSelectionModel().select(tab);
    }

    private Parent loadContent(URL resources) {
        try {
            FXMLLoader loader = new FXMLLoader();
            Parent parent = new AnchorPane();
            loader.setLocation(resources);
            parent = loader.load();
            return parent;
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }
    }

    private AnchorPane buildEntrepriseTab() {
        AnchorPane parent = (AnchorPane) loadContent(getClass()
                .getResource("../fxml/entreprise/entreprise.fxml"));
        return parent;
    }

    private AnchorPane buildTransactionTab() {
        AnchorPane parent = (AnchorPane) loadContent(getClass()
                .getResource("../fxml/transaction/transaction.fxml"));
        return parent;
    }

    private AnchorPane buildAccountTab() {
        AnchorPane parent = (AnchorPane) loadContent(getClass()
                .getResource("../fxml/account/account.fxml"));
        return parent;
    }

    private AnchorPane buildTypeOfTransactionTab() {
        AnchorPane parent = (AnchorPane) loadContent(getClass()
                .getResource("../fxml/TypeOfTransaction.fxml"));
        return parent;
    }


    private AnchorPane buildUserTab() {
        AnchorPane parent = (AnchorPane) loadContent(getClass()
                .getResource("../fxml/user/user.fxml"));
        return parent;
    }

    // Event Handling
    // Action events
    @FXML
    public void listDesEntrepriseClicked() {
        createTab("Entreprise", buildEntrepriseTab());
    }

    @FXML
    public void listTransactionClicked() {
        createTab("Transaction", buildTransactionTab());
    }

    @FXML
    public void listTypeOfTransactionClicked() {
        createTab("TypeOfTransaction", buildTypeOfTransactionTab());
    }

    @FXML
    public void listAccountClicked() {
        createTab("Compte", buildAccountTab());
    }

    @FXML
    public void listUserClicked() {
        createTab("Utilisateur", buildUserTab());
    }


}

推荐答案

由于执行jfx:jar目标,因此获得jar文件作为输出.

You get jar file as an output because you execute jfx:jar goal.

要获取本机软件包,应致电jfx:native.您可以在target/jfx/native/下找到您的软件包.

To get native packages you should call jfx:native. You'll find your packages under target/jfx/native/.

顺便说一下,有一个不错的Maven配置生成器(插件的版本已过时,但仍然可以使用)这里.它不仅使您能够生成有效的maven插件配置,而且还解释了所有配置属性并告诉您应调用的目标.

By the way, there's nice maven config generator (bit outdated version of plugin, but still works) here. It not only allows you to generate working maven plugin configuration, but also explains all configuration properties and tells you what goal should you call.

这篇关于Intellij Idea下的Javafx Maven部署的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆