All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.zenjava.javafx.maven.plugin.AbstractJfxToolsMojo Maven / Gradle / Ivy

Go to download

The JavaFX Maven Plugin provides a way to to assemble distributable bundles for JavaFX applications from within Maven. It provides a wrapper around the JavaFX packaging tools which are provided as part of the JavaFX installation.

There is a newer version: 8.8.3
Show newest version
package com.zenjava.javafx.maven.plugin;

import com.sun.javafx.tools.packager.Log;
import com.sun.javafx.tools.packager.PackagerLib;
import org.apache.maven.plugin.AbstractMojo;
import org.apache.maven.plugin.MojoExecutionException;
import org.apache.maven.project.MavenProject;

import java.io.File;
import java.lang.reflect.Method;
import java.net.URL;
import java.net.URLClassLoader;

/**
 * Base Mojo that any other Mojo wanting to access the JavaFX Packager tools should extend from. This provides
 * convenience methods for accessing the JavaFX Packager tools in a standard and simple way.
 */
public abstract class AbstractJfxToolsMojo extends AbstractMojo {

    /**
     * The Maven Project Object
     *
     * @parameter expression="${project}"
     * @required
     * @readonly
     */
    protected MavenProject project;

    /**
     * Flag to turn on verbose logging. Set this to true if you are having problems and what more detailed information.
     *
     * @parameter expression="${verbose}" default-value="false"
     */
    protected Boolean verbose;

    /**
     * The main JavaFX application class that acts as the entry point to the JavaFX application.
     *
     * @parameter expression="${mainClass}"
     * @required
     */
    protected String mainClass;

    /**
     * The 'app' output directory. This is where the base executable JavaFX jar is built into, along with any dependent
     * libraries (place in the 'lib' sub-directory). The resulting JAR in this directory will be ready for distribution,
     * including Pre-Loaders, signing, etc. This JAR will also be the one bundled into the other distribution bundles
     * (i.e. web or native) if you run the relevant commands for that.
     * 

* This defaults to 'target/jfx/app' and in most cases there is no real need to change this. * * @parameter expression="${project.build.directory}/jfx/app" */ protected File jfxAppOutputDir; /** * The name of the JavaFX packaged JAR to be built into the 'app' directory. By default this will be the finalName * as set in your project with a '-jfx' suffix. Change this if you want something nicer. Note, that changing this * value does not affect the regular old, non-JFX modified JAR (built in the 'target' directory). * * @parameter expression="${project.build.finalName}-jfx.jar" */ protected String jfxMainAppJarName; /** *

The directory contain deployment specific files, such as icons and splash screen images. This directory is added * to the classpath of the Mojo when it runs, so that any files within this directory are accessible to the * JavaFX packaging tools.

* *

This defaults to src/main/deploy and typically this is good enough. Just put your deployment specific files in * this directory and they will be automatically picked up.

* *

The most common usage for this is to provide platform specific icons for native bundles. In this case you need * to follow the convention of the JavaFX packaging tools to ensure your icons get picked up.

* *
    *
  • for windows put an icon at src/main/deploy/package/windows/your-app-name.ico
  • *
  • for mac put an icon at src/main/deploy/package/macosx/your-app-name.icns
  • *
* * @parameter expression="${project.basedir}/src/main/deploy" */ protected String deployDir; private PackagerLib packagerLib; public PackagerLib getPackagerLib() throws MojoExecutionException { if (packagerLib == null) { // add deployDir to system classpath if (deployDir != null) { getLog().info("Adding 'deploy' directory to Mojo classpath: " + deployDir); URLClassLoader sysloader = (URLClassLoader) ClassLoader.getSystemClassLoader(); Class sysclass = URLClassLoader.class; try { Method method = sysclass.getDeclaredMethod("addURL", URL.class); method.setAccessible(true); method.invoke(sysloader, new File(deployDir).toURI().toURL()); } catch (Throwable t) { t.printStackTrace(); throw new MojoExecutionException("Error, could not add URL to system classloader"); } } Log.Logger logger = new Log.Logger(verbose); Log.setLogger(logger); this.packagerLib = new PackagerLib(); } return this.packagerLib; } }




© 2015 - 2025 Weber Informatics LLC | Privacy Policy