org.wildfly.plugin.server.StartJarMojo Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of wildfly-maven-plugin Show documentation
Show all versions of wildfly-maven-plugin Show documentation
A maven plugin that allows various management operations to be executed on WildFly Application
Server.
The newest version!
/*
* Copyright The WildFly Authors
* SPDX-License-Identifier: Apache-2.0
*/
package org.wildfly.plugin.server;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import org.apache.maven.plugin.MojoExecutionException;
import org.apache.maven.plugin.MojoFailureException;
import org.apache.maven.plugin.logging.Log;
import org.apache.maven.plugins.annotations.Mojo;
import org.apache.maven.plugins.annotations.Parameter;
import org.apache.maven.plugins.annotations.ResolutionScope;
import org.wildfly.core.launcher.BootableJarCommandBuilder;
import org.wildfly.core.launcher.CommandBuilder;
import org.wildfly.plugin.common.Environment;
import org.wildfly.plugin.common.PropertyNames;
import org.wildfly.plugin.common.StandardOutput;
import org.wildfly.plugin.common.Utils;
/**
* Starts a WildFly Application Server packaged as Bootable JAR.
*
* The purpose of this goal is to start a WildFly Application Server packaged as a Bootable JAR for testing during the maven
* lifecycle.
*
* @since 5.0
*/
@Mojo(name = "start-jar", requiresDependencyResolution = ResolutionScope.RUNTIME)
public class StartJarMojo extends AbstractStartMojo {
/**
* Indicates how {@code stdout} and {@code stderr} should be handled for the spawned server process. Note that
* {@code stderr} will be redirected to {@code stdout} if the value is defined unless the value is {@code none}.
*
* By default {@code stdout} and {@code stderr} are inherited from the current process. You can change the setting
* to one of the follow:
*
* - {@code none} indicates the {@code stdout} and {@code stderr} stream should not be consumed. This should
* generally only be used if the {@code shutdown} goal is used in the same maven process.
* - {@code System.out} or {@code System.err} to redirect to the current processes (use this option if you
* see odd behavior from maven with the default value)
* - Any other value is assumed to be the path to a file and the {@code stdout} and {@code stderr} will be
* written there
*
*
*
* Note that if this goal is not later followed by a {@code shutdown} goal in the same maven process you should use
* a file to redirect the {@code stdout} and {@code stderr} to. Both output streams will be redirected to the same
* file.
*
*/
@Parameter(property = PropertyNames.STDOUT)
private String stdout;
/**
* When {@code bootable-jar} is set to true, use this parameter to name the generated jar file.
*
* Note that since 5.1 the default name changed from {@code server-bootable.jar} to
* {@code ${project.artifactId}-bootable.jar}.
*
*/
@Parameter(alias = "bootable-jar-name", property = PropertyNames.BOOTABLE_JAR_NAME, defaultValue = "${project.artifactId}-bootable.jar")
private String bootableJarName;
@Override
public void execute() throws MojoExecutionException, MojoFailureException {
final Log log = getLog();
if (skip) {
log.debug("Skipping server start");
return;
}
// Determine how stdout should be consumed
try {
startServer(ServerType.STANDALONE);
} catch (MojoExecutionException e) {
throw e;
} catch (Exception e) {
throw new MojoExecutionException("The server failed to start", e);
}
}
@Override
protected CommandBuilder createCommandBuilder(final Path server) throws MojoExecutionException {
BootableJarCommandBuilder commandBuilder = BootableJarCommandBuilder.of(server).setJavaHome(javaHome);
// Set the JVM options
if (Utils.isNotNullOrEmpty(javaOpts)) {
commandBuilder.setJavaOptions(javaOpts);
}
if (debug) {
commandBuilder.addJavaOptions(String.format("-agentlib:jdwp=transport=dt_socket,server=y,suspend=%s,address=%s:%d",
debugSuspend ? "y" : "n", debugHost, debugPort));
}
if (propertiesFile != null) {
commandBuilder.addServerArgument("-P" + propertiesFile);
}
if (serverArgs != null) {
commandBuilder.addServerArguments(serverArgs);
}
final Path javaHomePath = (this.javaHome == null ? Paths.get(System.getProperty("java.home"))
: Paths.get(this.javaHome));
if (Environment.isModularJvm(javaHomePath)) {
commandBuilder.addJavaOptions(Environment.getModularJvmArguments());
}
// Print some server information
final Log log = getLog();
log.info("JAVA_HOME : " + commandBuilder.getJavaHome());
log.info("JAVA_OPTS : " + Utils.toString(commandBuilder.getJavaOptions(), " "));
return commandBuilder;
}
@Override
protected StandardOutput standardOutput() throws IOException {
return StandardOutput.parse(stdout, true);
}
@Override
public String goal() {
return "start-jar";
}
@Override
protected Path getServerHome() throws MojoExecutionException, MojoFailureException {
String jarName = bootableJarName;
Path targetPath = Paths.get(project.getBuild().getDirectory());
Path jarFile = targetPath.toAbsolutePath()
.resolve(jarName);
if (!Files.exists(jarFile)) {
throw new MojoExecutionException(String.format("Bootable JAR file '%s' doesn't exist.", jarFile));
}
return jarFile;
}
}
© 2015 - 2024 Weber Informatics LLC | Privacy Policy