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

com.zenjava.javafx.maven.plugin.RunMojo 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
/*
 * Copyright 2012 Daniel Zwolenski.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package com.zenjava.javafx.maven.plugin;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.Optional;
import org.apache.maven.plugin.MojoExecutionException;
import org.apache.maven.plugin.MojoFailureException;

/**
 *
 * @goal run
 * @execute goal="jar"
 */
public class RunMojo extends AbstractJfxToolsMojo {

    /**
     * Developing and debugging javafx applications can be difficult, so a lot of
     * tools exists, that need to be injected into the JVM via special parameter
     * (e.g. javassist). To have this being part of the command used to start the
     * application by this MOJO, just set all your parameters here.
     *
     * @parameter property="jfx.runJavaParameter"
     */
    protected String runJavaParameter = null;

    /**
     * While developing, you might need some arguments for your application passed
     * to your execution. To have them being part of the command used to start the
     * application by this MOJO, just set all your parameters here.
     *
     * This fixes issue #176.
     *
     * @see https://github.com/javafx-maven-plugin/javafx-maven-plugin/issues/176
     * @parameter property="jfx.runAppParameter"
     */
    protected String runAppParameter = null;

    @Override
    public void execute() throws MojoExecutionException, MojoFailureException {
        if( skip ){
            getLog().info("Skipping execution of RunMojo MOJO.");
            return;
        }

        getLog().info("Running JavaFX Application");

        List command = new ArrayList<>();
        command.add(getEnvironmentRelativeExecutablePath() + "java");

        // might be useful for having a custom javassist or debugger integrated in this command
        Optional.ofNullable(runJavaParameter).ifPresent(parameter -> {
            if( !parameter.trim().isEmpty() ){
                command.add(parameter);
            }
        });

        command.add("-jar");
        command.add(jfxMainAppJarName);

        // it is possible to have jfx:run pass additional parameters
        // fixes https://github.com/javafx-maven-plugin/javafx-maven-plugin/issues/176
        Optional.ofNullable(runAppParameter).ifPresent(parameter -> {
            if( !parameter.trim().isEmpty() ){
                command.add(parameter);
            }
        });

        try{
            ProcessBuilder pb = new ProcessBuilder()
                    .inheritIO()
                    .directory(jfxAppOutputDir)
                    .command(command);

            if( verbose ){
                getLog().info("Running command: " + String.join(" ", command));
            }

            Process p = pb.start();
            p.waitFor();
            if( p.exitValue() != 0 ){
                throw new MojoExecutionException("There was an exception while executing JavaFX Application. Please check build-log.");
            }
        } catch(IOException | InterruptedException ex){
            throw new MojoExecutionException("There was an exception while executing JavaFX Application.", ex);
        }
    }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy