/* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You 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 org.apache.activemq.artemis.maven; import java.io.File; import org.apache.activemq.artemis.boot.Artemis; import org.apache.activemq.artemis.cli.commands.Run; import org.apache.activemq.artemis.jms.client.ActiveMQConnectionFactory; import org.apache.maven.plugin.MojoExecutionException; import org.apache.maven.plugin.MojoFailureException; import org.apache.maven.plugin.descriptor.PluginDescriptor; import org.apache.maven.plugins.annotations.LifecyclePhase; import org.apache.maven.plugins.annotations.Mojo; import org.apache.maven.plugins.annotations.Parameter; import org.apache.maven.project.MavenProject; @Mojo(name = "cli", defaultPhase = LifecyclePhase.VERIFY) public class ArtemisCLIPlugin extends ArtemisAbstractPlugin { private PluginDescriptor descriptor; @Parameter(defaultValue = "${noServer}") boolean ignore; @Parameter(defaultValue = "server") String name; @Parameter(defaultValue = "${activemq.basedir}", required = true) private File home; @Parameter(defaultValue = "${activemq.basedir}/artemis-distribution/target/apache-artemis-${project.version}-bin/apache-artemis-${project.version}/", required = true) private File alternateHome; @Parameter(defaultValue = "${basedir}/target/server0", required = true) private File location; @Parameter private String[] args; @Parameter private boolean spawn = false; @Parameter(defaultValue = "300000") private long spawnTimeout; @Parameter private String testURI = null; @Parameter private String testUser = null; @Parameter private String testPassword = null; @Override protected boolean isIgnore() { return ignore; } @Override protected void doExecute() throws MojoExecutionException, MojoFailureException { // This is to avoid the Run issuing a kill at any point Run.setEmbedded(true); MavenProject project = (MavenProject) getPluginContext().get("project"); if (!isArtemisHome(home.toPath())) { if (isArtemisHome(alternateHome.toPath())) { home = alternateHome; } else { getLog().error("********************************************************************************************"); getLog().error("Could not locate suitable Artemis.home on either " + home + " or " + alternateHome); getLog().error("Use the binary distribution or build the distribution before running the examples"); getLog().error("********************************************************************************************"); throw new MojoExecutionException("Couldn't find artemis.home"); } } try { if (spawn) { final Process process = org.apache.activemq.artemis.cli.process.ProcessBuilder.build(name, location, true, args); Runtime.getRuntime().addShutdownHook(new Thread() { @Override public void run() { process.destroy(); } }); if (testURI != null) { long timeout = System.currentTimeMillis() + spawnTimeout; while (System.currentTimeMillis() <= timeout) { try (ActiveMQConnectionFactory cf = new ActiveMQConnectionFactory(testURI)) { if (testUser != null && testPassword != null) { cf.createConnection(testUser, testPassword).close(); } else { cf.createConnection().close(); } getLog().info("Server started"); } catch (Exception e) { getLog().info("awaiting server to start"); Thread.sleep(500); continue; } break; } } } else { Artemis.execute(home, location, args); } Thread.sleep(600); org.apache.activemq.artemis.cli.process.ProcessBuilder.cleanupProcess(); } catch (Throwable e) { throw new MojoExecutionException(e.getMessage(), e); } } }