Приложение JavaFx 2.0, ссылающееся на внешние jar - PullRequest
2 голосов
/ 19 июля 2011

Я занимаюсь разработкой приложения JavaFx 2.0 с использованием Netbeans 7. Основное приложение ссылается на другой проект библиотеки классов, добавленный путем щелчка правой кнопкой мыши на папке «Библиотеки» и выбора «Добавить проект ...».Выполнение приложения из NetBeans работает нормально.

При развертывании его в файл JAR с помощью «Очистить и собрать» и пытается выполнить его через консоль с

java -jar TestApp.jar

Я получаю

Exception in thread "JavaFX-Launcher" java.lang.NoClassDefFoundError: net/pmoule/SomeClass
...

Папка dist / lib моего приложения содержит указанную библиотеку.Так что ИМХО все должно быть хорошо.Глядя на файл Manifest.MF, содержащийся в моем банке приложения, я получаю

Manifest-Version: 1.0
Ant-Version: Apache Ant 1.8.2
Created-By: 1.6.0_23-b05 (Sun Microsystems Inc.)
Implementation-Vendor: pmoule
Implementation-Title: TestApp
Implementation-Version: 1.0
Main-Class: com/javafx/main/Main
JavaFX-Application-Class: testapp.TestApp
JavaFX-Version: 2.0

Где находится мой путь к классу?Как заставить Netbeans добавить правильный путь к классу?

Я попытался добавить его вручную в Manifest.MF, отредактировав файл, содержащийся в jar

Manifest-Version: 1.0
Ant-Version: Apache Ant 1.8.2
Created-By: 1.6.0_23-b05 (Sun Microsystems Inc.)
Implementation-Vendor: pmoule
Implementation-Title: TestApp
Implementation-Version: 1.0
Class-Path: lib/MyLib.jar        //THIS IS NEW
Main-Class: com/javafx/main/Main
JavaFX-Application-Class: testapp.TestApp
JavaFX-Version: 2.0

Нет успеха и та же ошибка.

Все образцы, поставляемые с JavaFX 2.0 SDK, работают двойным щелчком в WindowsExplorer или с консоли, например, набирая, например,

java -jar PathAnimation.jar

Но ни один из этих примеров не ссылается на внешний jar.

Некоторые исследования привели меня к этому вопросу: Приложение JavaFX 2.0 Netbeans Но пока без какого-либо решения.

Спасибо за любую помощь!

Ответы [ 3 ]

3 голосов
/ 24 июля 2011

Сам нашел рабочее решение.

Все внешние библиотеки в папке dist / lin имели размер 0 КБ.Конечно, исключение было правильным.

Чтобы запустить приложение, я сделал следующее в jfx-impl.xml проекта:

Добавьте classpath к manifest.mf

<fxjar destfile="${jfx.deployment.dir}/${jfx.deployment.jar}" applicationClass="${main.class}" >
             <fileset dir="${build.classes.dir}"/>
              <manifest>
               <attribute name="Implementation-Vendor" value="${application.vendor}"/>
               <attribute name="Implementation-Title" value="${application.title}"/>
<!-- NEW -->   <attribute name="Class-Path" value="${jar.classpath}"/> <!-- NEW -->
               <attribute name="Implementation-Version" value="1.0"/>
              </manifest>
    </fxjar>

Создание выходного каталога для веб-развертывания

<property name="jfx.deployment.web.dir" location="${jfx.deployment.dir}/web" />
<mkdir dir="${jfx.deployment.web.dir}" />

Установка выходного каталога для задачи fxdeploy

<fxdeploy width="${jfx.applet.width}" height="${jfx.applet.height}"
              outdir="${jfx.deployment.web.dir}" <!-- NEW DIR -->
              embedJNLP="true"
              outfile="${application.title}">
        <info title="${application.title}"
              vendor="${application.vendor}"/>
        <application name="${application.title}"
                     appclass="${main.class}"/>
        <resources type="eager">
           <fileset dir="${jfx.deployment.web.dir}"> <!-- NEW DIR -->
              <include name="${jfx.deployment.jar}"/>
              <include name="lib/*.jar"/>
              <exclude name="**/jfxrt.jar"/>
           </fileset>
        </resources>
</fxdeploy>

Теперь я могу развернуть свое настольное приложение и выполнить ist с помощью двойного клика из проводника Windows или введя

java -jar TestApp.jar

Все еще существует некоторая проблема с содержимым моего недавно созданного веб-каталога.

  1. Файл TestApp.jar не скопирован zo dist / web
  2. Указанные внешние банки не копируются в dist / web

Это хорошо дляменя и исправят через некоторое время.

Надеюсь, это кому-нибудь еще поможет.

0 голосов
/ 11 июня 2013

Вы должны указать задаче fx: jar, каковы ваши зависимости classpath:

<fxjar destfile="${jfx.deployment.dir}/${jfx.deployment.jar}" applicationClass="${main.class}" >
      <fileset dir="${build.classes.dir}"/>
      <manifest>
        <attribute name="Implementation-Vendor" value="${application.vendor}"/>
        <attribute name="Implementation-Title" value="${application.title}"/>
        <attribute name="Implementation-Version" value="1.0"/>
      </manifest>

      <!-- Setup the classpath for the generated .jar here -->
      <fx:resources>
        <fx:fileset type="jar" dir="lib" includes="MyLib.jar"/>
      </fx:resources>
</fxjar>

Вам также необходимо использовать тег fx: resources в вашей задаче fx: deploy вместо просто ресурсов. Это должно решить две последние проблемы, оставшиеся в вашем ответе.

0 голосов
/ 21 июля 2011

В Netbeans в разделе project => properties => Build => Packaging вы отметили «Копировать зависимые библиотеки»?

...