2016-03-01 333 views
0

我在Intellij idea Editor下有一个基于maven的项目。我正在使用javafx-maven-plugin。 我的目标是将我的项目部署为EXE或MSI可安装文件。 由于这是第一次使用maven,plz帮助我为pom.xml文件做出正确的配置。还是有另一种方式比maven容易,可以帮助我实现我的目标,所以,不要犹豫提及它。Intellij idea下的Javafx maven deployemnt Idea

所以,这是我的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这pom.xml的后:JavaFX的Maven的插件:JFX-JAR。 我得到这样的结果显示这样的结果:

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”,之后双击该文件不作品。 目标下/ jfx /我得到EntrepriseLimited-1.0-jfx.jar 目标下/ jfx/lib我看到依赖关系。双击文件“ntrepriseLimited-1.0-jfx.jar”后,它不能正常工作。

这里是主要的应用程序代码:

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); 
    } 

} 

而且她是主窗口控制器在那里我打开新窗口,根据用户 行动:

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()); 
    } 


} 
+0

Usualy我只创建EXE文件,如果下'JFX /本地/ {项目名称}目标中找到 - $ {项目verions}' – hotzst

+0

你怎么配置的pom.xml –

回答

1

你得到jar文件作为输出因为你执行jfx:jar的目标。

要获得本机包,您应该拨打jfx:native。你会发现你的包裹在target/jfx/native/下。

顺便说一下,有很好的maven配置生成器(过时的插件版本,但仍然有效)here。它不仅可以生成工作的Maven插件配置,还可以解释所有配置属性,并告诉你应该调用什么目标。

+0

执行\t 建设 - 后原生,它完美地生成了一个可执行文件,但只有工作的mainWindow。我仍然无法使其他窗口工作,我认为他不包括资源文件。无论如何,我已更新我的文章与更新的pom.xml文件 –

+0

@abdouamer请添加您实例化新窗口的代码片段。这是值得检查,如果这些'fxml'文件存在你的'jar'文件(通过'jfx:jar'生成) –

+0

是的,当我打开JAR文件时,我看到了我放fxml文件的fxml文件夹。 –