2013-06-05 2 views
0

Привет, я пытаюсь обернуть javaFX-jar плагином launch4j maven.JavaFX2 wrapping launch4j as maven plugin

Но исполнение не удается:

Exception in thread "main" java.lang.NoClassDefFoundError: javafx/applicatio 
    at java.lang.ClassLoader.defineClass1(Native Method) 
    at java.lang.ClassLoader.defineClass(Unknown Source) 
    at java.security.SecureClassLoader.defineClass(Unknown Source) 
    at java.net.URLClassLoader.defineClass(Unknown Source) 
    at java.net.URLClassLoader.access$100(Unknown Source) 
    at java.net.URLClassLoader$1.run(Unknown Source) 
    at java.net.URLClassLoader$1.run(Unknown Source) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at java.net.URLClassLoader.findClass(Unknown Source) 
    at java.lang.ClassLoader.loadClass(Unknown Source) 
    at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source) 
    at java.lang.ClassLoader.loadClass(Unknown Source) 
    at sun.launcher.LauncherHelper.checkAndLoadMain(Unknown Source) 
Caused by: java.lang.ClassNotFoundException: javafx.application.Application 
    at java.net.URLClassLoader$1.run(Unknown Source) 
    at java.net.URLClassLoader$1.run(Unknown Source) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at java.net.URLClassLoader.findClass(Unknown Source) 
    at java.lang.ClassLoader.loadClass(Unknown Source) 
    at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source) 
    at java.lang.ClassLoader.loadClass(Unknown Source) 
    ... 13 more 

Похоже, что ехе не может найти jfxruntime. Если я запускаю программу с помощью java -jar ..., она отлично работает.

Вот частичное моей pom.xml

 <plugin> 
      <artifactId>maven-compiler-plugin</artifactId> 
      <version>3.0</version> 
      <configuration> 
       <source>1.7</source> 
       <target>1.7</target> 
       <encoding></encoding> 
      </configuration> 
     </plugin> 

     <plugin> 
      <groupId>com.zenjava</groupId> 
      <artifactId>javafx-maven-plugin</artifactId> 
      <version>1.5</version> 
      <executions> 
       <execution> 
        <phase>package</phase> 
        <goals> 
         <goal>build-jar</goal> 
        </goals> 
       </execution> 
      </executions> 
      <configuration> 
       <mainClass>org.myprogram.Main</mainClass> 
       <bundleType>ALL</bundleType> 
       <vendor>me</vendor> 
      </configuration> 
     </plugin> 

     <plugin> 
      <groupId>org.bluestemsoftware.open.maven.plugin</groupId> 
      <artifactId>launch4j-plugin</artifactId> 
      <version>1.5.0.0</version> 
      <executions> 
       <execution> 
        <id>l4j-gui</id> 
        <phase>package</phase> 
        <goals> 
         <goal>launch4j</goal> 
        </goals> 
        <configuration> 
         <headerType>gui</headerType> 
         <outfile>target/MyProgram.exe/outfile> 
         <jar>target/${project.artifactId}-${project.version}-jfx.jar</jar> 
         <errTitle>App Err</errTitle> 
         <classPath> 
          <mainClass>org.myprogram.Main</mainClass> 
         </classPath>        
         <jre> 
          <minVersion>1.7.0</minVersion>        
          <initialHeapSize>128</initialHeapSize> 
          <maxHeapSize>1024</maxHeapSize> 
         </jre> 
        </configuration> 
       </execution> 
      </executions> 
     </plugin> 
    </plugins> 

Спасибо за вашу помощь.

ответ

1

Я подозреваю, что проблема в версии JRE, которую вы указываете. JavaFX (версия 2.2) не был связан с JRE до версии 1.7. 6. Я думаю, что ваш параметр minVersion, вероятно, принимает JRE, который является обновлением 5 или более ранним, и библиотеки JavaFX не установлены (правильно). Попробуйте указать <minVersion>1.7.0_09</minVersion> и посмотрите, работает ли это.

Я, кажется, помню, что если у вас есть 64-битное обновление 6 и 32-битное обновление, то 5 launcher4j выберет 32-битную версию, хотя 64-битная будет лучше. Это может объяснить, почему он работает в вашей среде разработки, но не при построении.

Кроме того, ваша конфигурация POM выглядит почти такой же, как моя, которая работает нормально.

Редактировать

Это работает для меня ...

<plugin> 
<groupId>com.akathist.maven.plugins.launch4j</groupId> 
<artifactId>launch4j-maven-plugin</artifactId> 
<version>1.5.1</version> 
<executions> 
    <execution> 
     <id>l4j-gui</id> 
     <phase>package</phase> 
     <goals> 
      <goal>launch4j</goal> 
     </goals> 
     <configuration> 
      <dontWrapJar>true</dontWrapJar> 
      <headerType>gui</headerType> 
      <jar>mapp.jar</jar> 
      <outfile>${project.build.directory}/dist/myapp.exe</outfile> 
      <errTitle/> 
      <cmdLine/> 
      <chdir/> 
      <priority>normal</priority> 
      <downloadUrl>http://java.com/download</downloadUrl> 
      <supportUrl/> 
      <customProcName>false</customProcName> 
      <stayAlive>false</stayAlive> 
      <manifest/> 
      <icon/> 
      <jre> 
       <path/> 
       <minVersion>1.7.0_09</minVersion> 
       <maxVersion/> 
       <jdkPreference>preferJre</jdkPreference> 
       <initialHeapSize>256</initialHeapSize> 
       <maxHeapSize>3000</maxHeapSize> 
      </jre> 
      <splash> 
       <file>${project.basedir}/src/main/build/splash.bmp</file> 
       <waitForWindow>true</waitForWindow> 
       <timeout>60</timeout> 
       <timeoutErr>true</timeoutErr> 
      </splash> 
      <versionInfo> 
       <fileVersion>0.0.0.0</fileVersion> 
       <txtFileVersion>${project.version}</txtFileVersion> 
       <fileDescription>Desc</fileDescription> 
       <copyright>Company 2013</copyright> 
       <productVersion>0.0.0.0</productVersion> 
       <txtProductVersion>${project.version}</txtProductVersion> 
       <productName>My App</productName> 
       <companyName>Company</companyName> 
       <internalName>myapp</internalName> 
       <originalFilename>myapp.exe</originalFilename> 
      </versionInfo> 
     </configuration> 
    </execution> 
</executions> 

+0

Я уточнила мин версию с 1.7.0_17 демонтирована все другие Java-версии. По-прежнему та же проблема вы использовали launch4j для проекта jfx2? – worcin

+0

Один из наших продуктов использует JavaFX 2, а exe построен с помощью launch4j. Я использую другую сборку плагина для вас, но конфигурация такая же (см. Редактирование ответа). Я, кажется, помню, что я получил большинство моих настроек с этой страницы: http://9stmaryrd.com/tools/launch4j-maven-plugin/ – wobblycogs

+0

Большое спасибо, я использовал вашу конфигурацию, и она работала хорошо. Я думаю, проблема в другой оболочке. – worcin