2015-11-12 3 views
0

Хорошо, поэтому я довольно новичок в javafx и программировании в целом. Я никогда не упаковывал программу раньше, так как мне никогда не приходилось запускать их за пределами среды IDE. Мне нужно упаковать мою программу javafx и использовать maven для этого, поскольку она обрабатывает все мои другие зависимости.После компиляции проекта с плагином Javafx Maven, программа Cant Locate Resources

После компиляции программы с использованием команды mvn jfx: jar в каталоге, содержащем файл pom, сборка завершается успешно и создает мою банку. Что при проверке через WINRar содержит все файлы, которые ранее были в папке/src/main/resource в корневом каталоге.

Однако при запуске с java -jar (nameofjar) .jar он не запускается и вместо этого создает несколько ошибок, связанных с тем, что они не могут найти определенные ресурсы, в частности, FXML, среди других ресурсов.

Refrences к файлам

welcome.fxml

public void start(Stage primaryStage) { 


    try { 
     AnchorPane pane = FXMLLoader.load(MainApp.class.getResource("welcome.fxml")); 
     Scene scene = new Scene(pane); 
     primaryStage.setScene(scene); 
     primaryStage.setTitle("HeelBot Beta "+versionNumber); 

     primaryStage.getIcons().add(new Image("Icon.png")); 
     primaryStage.setResizable(true); 
     primaryStage.show(); 
    } catch (Exception ex) { 
     Logger.getLogger(MainApp.class.getName()).log(Level.SEVERE, null, ex); 
    } 

defaultProperties.properties

public class PropertiesManager { 
    public static void editProperty(String key, String value) throws IOException { 
     // create and load default properties 
     Properties defaultProps = new Properties(); 
     FileInputStream in = new FileInputStream("src/main/resources/defaultProperties.properties"); 
     defaultProps.load(in); 
     in.close(); 

// create application properties with default 
     Properties applicationProps = new Properties(defaultProps); 

// now load properties 
// from last invocation 
     in = new FileInputStream("src/main/resources/appProperties.properties"); 
     applicationProps.load(in); 
     in.close(); 
//set properties 
     applicationProps.setProperty(key,value); 
     FileOutputStream out = new FileOutputStream("src/main/resources/appProperties.properties"); 
     applicationProps.store(out, "---No Comment---"); 
     out.close(); 

    } 

POM FILE

<?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.coursecruncher</groupId> 
    <artifactId>heelbot</artifactId> 
    <version>1.0-SNAPSHOT</version> 
<build> 
    <plugins> 
     <plugin> 
      <groupId>com.zenjava</groupId> 
      <artifactId>javafx-maven-plugin</artifactId> 
      <version>8.1.4</version> 
      <configuration> 
       <mainClass>MainApp</mainClass> 
       <verbose>true</verbose> 
       <jfxMainAppJarName>heelbot.jar</jfxMainAppJarName> 
       <deployDir>${project.basedir}/src/main/resources</deployDir> 
       <updateExistingJar>true</updateExistingJar> 
       <allPermissions>true</allPermissions> 
      </configuration> 
     </plugin> 

    </plugins> 

</build> 

    <dependencies> 

     <dependency> 
      <groupId>org.seleniumhq.selenium</groupId> 
      <artifactId>selenium-java</artifactId> 
      <version>2.48.2</version> 
     </dependency> 
     <dependency> 
      <groupId>org.apache.shiro</groupId> 
      <artifactId>shiro-core</artifactId> 
      <version>1.2.4</version> 
     </dependency> 
    </dependencies> 

</project> 

Структура проекта

├── configure 
├── configure.in 
├── src 
│ ├── main 
│ │ ├── java 
│ │ │  ├── CoreController(class) 
│ │ │  ├── Login(class) 
│ │ │  ├── LoginController(class) 
│ │ │  ├── MainApp(class) 
│ │ │  └── PropertiesManager(class) 
│ │ │   
│ │ ├── resources 
│ │ │  ├── appProperties.properties 
│ │ │  ├── defaultProperties.properties 
│ │ │  ├── welcome.fxml 
│ │ │  ├── core.fxml 
│ │ │  └── Heelbot.css 

Ошибка

enter code here 

java.io.FileNotFoundException: src\main\resources\defaultProperties.properties (
The system cannot find the path specified) 
     at java.io.FileInputStream.open0(Native Method) 
     at java.io.FileInputStream.open(FileInputStream.java:195) 
     at java.io.FileInputStream.<init>(FileInputStream.java:138) 
     at java.io.FileInputStream.<init>(FileInputStream.java:93) 
     at PropertiesManager.editProperty(PropertiesManager.java:11) 
     at LoginController.initialize(LoginController.java:60) 
     at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:2548) 
     at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:2441) 
     at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3214) 
     at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3175) 
     at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3148) 
     at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3124) 
     at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3104) 
     at javafx.fxml.FXMLLoader.load(FXMLLoader.java:3097) 
     at Main.start(Main.java:53) 
     at com.sun.javafx.application.LauncherImpl.lambda$launchApplication1$163 
(LauncherImpl.java:863) 
     at com.sun.javafx.application.PlatformImpl.lambda$runAndWait$176(Platfor 
mImpl.java:326) 
     at com.sun.javafx.application.PlatformImpl.lambda$null$174(PlatformImpl. 
java:295) 
     at java.security.AccessController.doPrivileged(Native Method) 
     at com.sun.javafx.application.PlatformImpl.lambda$runLater$175(PlatformI 
mpl.java:294) 
     at com.sun.glass.ui.InvokeLaterDispatcher$Future.run(InvokeLaterDispatch 
er.java:95) 
     at com.sun.glass.ui.win.WinApplication._runLoop(Native Method) 
     at com.sun.glass.ui.win.WinApplication.lambda$null$149(WinApplication.ja 
va:191) 
     at java.lang.Thread.run(Thread.java:745) 
java.io.FileNotFoundException: src\main\resources\defaultProperties.properties (
The system cannot find the path specified) 
     at java.io.FileInputStream.open0(Native Method) 
     at java.io.FileInputStream.open(FileInputStream.java:195) 
     at java.io.FileInputStream.<init>(FileInputStream.java:138) 
     at java.io.FileInputStream.<init>(FileInputStream.java:93) 
     at PropertiesManager.queryProperty(PropertiesManager.java:34) 
     at LoginController.initialize(LoginController.java:106) 
     at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:2548) 
     at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:2441) 
     at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3214) 
     at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3175) 
     at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3148) 
     at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3124) 
     at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3104) 
     at javafx.fxml.FXMLLoader.load(FXMLLoader.java:3097) 
     at Main.start(Main.java:53) 
     at com.sun.javafx.application.LauncherImpl.lambda$launchApplication1$163 
(LauncherImpl.java:863) 
     at com.sun.javafx.application.PlatformImpl.lambda$runAndWait$176(Platfor 
mImpl.java:326) 
     at com.sun.javafx.application.PlatformImpl.lambda$null$174(PlatformImpl. 
java:295) 
     at java.security.AccessController.doPrivileged(Native Method) 
     at com.sun.javafx.application.PlatformImpl.lambda$runLater$175(PlatformI 
mpl.java:294) 
     at com.sun.glass.ui.InvokeLaterDispatcher$Future.run(InvokeLaterDispatch 
er.java:95) 
     at com.sun.glass.ui.win.WinApplication._runLoop(Native Method) 
     at com.sun.glass.ui.win.WinApplication.lambda$null$149(WinApplication.ja 
va:191) 
     at java.lang.Thread.run(Thread.java:745) 
Nov 12, 2015 5:12:08 PM Main start 
SEVERE: null 
javafx.fxml.LoadException: 
file:/D:/Programing%20Data/Projects/CourseCruncher/target/jfx/app/heelbot.jar!/w 
elcome.fxml 

     at javafx.fxml.FXMLLoader.constructLoadException(FXMLLoader.java:2601) 
     at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:2579) 
     at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:2441) 
     at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3214) 
     at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3175) 
     at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3148) 
     at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3124) 
     at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3104) 
     at javafx.fxml.FXMLLoader.load(FXMLLoader.java:3097) 
     at Main.start(Main.java:53) 
     at com.sun.javafx.application.LauncherImpl.lambda$launchApplication1$163 
(LauncherImpl.java:863) 
     at com.sun.javafx.application.PlatformImpl.lambda$runAndWait$176(Platfor 
mImpl.java:326) 
     at com.sun.javafx.application.PlatformImpl.lambda$null$174(PlatformImpl. 
java:295) 
     at java.security.AccessController.doPrivileged(Native Method) 
     at com.sun.javafx.application.PlatformImpl.lambda$runLater$175(PlatformI 
mpl.java:294) 
     at com.sun.glass.ui.InvokeLaterDispatcher$Future.run(InvokeLaterDispatch 
er.java:95) 
     at com.sun.glass.ui.win.WinApplication._runLoop(Native Method) 
     at com.sun.glass.ui.win.WinApplication.lambda$null$149(WinApplication.ja 
va:191) 
     at java.lang.Thread.run(Thread.java:745) 
Caused by: java.lang.NullPointerException 
     at java.util.Properties$LineReader.readLine(Properties.java:434) 
     at java.util.Properties.load0(Properties.java:353) 
     at java.util.Properties.load(Properties.java:341) 
     at PropertiesManager.queryProperty(PropertiesManager.java:39) 
     at LoginController.initialize(LoginController.java:106) 
     at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:2548) 
     ... 17 more 

Я подозреваю, что моя конфигурация ПОМ может быть то, что является причиной проблемы. Я не совсем уверен, как правильно отформатировать его и попробовал различные комбинации и учебные пособия безрезультатно. Ближайший я когда-либо получал использовал этот POM

Alternate POM файл

<?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.courecruncher</groupId> 
    <artifactId>heelbot</artifactId> 
    <version>1.0-SNAPSHOT</version> 
    <packaging>jar</packaging> 
    <name>HeelBotBeta1</name> 

    <dependencies> 
     <dependency> 
      <groupId>junit</groupId> 
      <artifactId>junit</artifactId> 
      <version>4.11</version> 
      <scope>test</scope> 
     </dependency> 
     <dependency> 
      <groupId>org.seleniumhq.selenium</groupId> 
      <artifactId>selenium-java</artifactId> 
      <version>2.48.2</version> 
     </dependency> 
     <dependency> 
      <groupId>org.apache.shiro</groupId> 
      <artifactId>shiro-core</artifactId> 
      <version>1.2.4</version> 
     </dependency> 

    </dependencies> 
    <build> 
     <defaultGoal>clean package</defaultGoal> 
     <plugins> 
      <plugin> 
       <artifactId>maven-dependency-plugin</artifactId> 
       <version>2.6</version> 
       <executions> 
        <execution> 
         <id>unpack-dependencies</id> 
         <phase>package</phase> 
         <goals> 
          <goal>unpack-dependencies</goal> 
         </goals> 
         <configuration> 
          <excludeScope>system</excludeScope> 
          <excludeGroupIds>junit,org.mockito,org.hamcrest</excludeGroupIds> 
          <outputDirectory>${project.build.directory}/classes</outputDirectory> 
         </configuration> 
        </execution> 
       </executions> 
      </plugin> 
      <plugin> 
       <groupId>org.codehaus.mojo</groupId> 
       <artifactId>exec-maven-plugin</artifactId> 
       <version>1.2.1</version> 
       <executions> 
        <execution> 
         <id>package-jar</id> 
         <phase>package</phase> 
         <goals> 
          <goal>exec</goal> 
         </goals> 
         <configuration> 
          <executable>${env.JAVA_HOME}/bin/javafxpackager</executable> 
          <arguments> 
           <argument>-createjar</argument> 
           <argument>-nocss2bin</argument> 
           <argument>-appclass</argument> 
           <argument>MainApp</argument> 
           <argument>-srcdir</argument> 
           <argument>${project.build.directory}/classes</argument> 
           <argument>-outdir</argument> 
           <argument>.</argument> 
           <argument>-outdir</argument> 
           <argument>${project.build.directory}</argument> 
           <argument>-outfile</argument> 
           <argument>${project.artifactId}-app</argument> 
           <argument>-v</argument> 
          </arguments> 
         </configuration> 
        </execution> 
       </executions> 
      </plugin> 
     </plugins> 
    </build> 
    <properties> 
     <maven.compiler.source>1.8</maven.compiler.source> 
     <maven.compiler.target>1.8</maven.compiler.target> 
     <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> 
    </properties> 
</project> 

Это приведет к его найти файл FXML, но по-прежнему бросает ошибку для файла свойств я бы вручную добавить файлы свойств в каталог проекта. Как сделать упакованную банку способной находить собственные ресурсы, а не искать ресурсы за пределами банки?

+0

Размер вашего сообщения отражает количество людей, которые успеют вам помочь. Было бы лучше попытаться создать [MCVE] (http://stackoverflow.com/help/mcve). –

ответ

0

Я хранитель JavaFX-Maven-плагин, наткнулся на этот вопрос в аварию;)

Проблема заключается в вашей «логике» чтение, что файлы, доступ к этой недвижимости-файлу в вашем JAR выполняется по-другому, но это не ошибка используемого плагина, это нормальная Java-вещь (как указано нашим брошенным exxception).Для того, чтобы знать, где «текущая папка» есть, просто распечатать new File(".")

Просто сообщить Вам о том, что конфигурации JavaFX-Maven-плагин: нет ничего плохого

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

Load properties file in JAR?

Load Properties from resources folder within JAR

EDIT: пожалуйста, убедитесь, что о наличии немного знаний о «текущем вр король папка ", вызов java -jar somejar.jar отличается от java -jar somefolder/somejar.jar, имеет большое значение

 Смежные вопросы

  • Нет связанных вопросов^_^