/** * 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.maven; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.nio.MappedByteBuffer; import java.nio.channels.FileChannel; import org.apache.activemq.console.Main; import org.apache.maven.plugin.AbstractMojo; import org.apache.maven.plugin.MojoExecutionException; /** * Goal which starts activemq broker. * * @goal broker * @phase process-sources */ public class ServerMojo extends AbstractMojo { /** * Location of the output directory. Defaults to target. * * @parameter property="project.build.directory" * @required */ private File outputDirectory; /** * Location of the predefined config files. * * @parameter property="configDirectory" * default-value="${basedir}/src/main/resources/broker-conf" * @required */ private String configDirectory; /** * Type of activemq configuration to use. This is also the filename used. * * @parameter property="configType" default-value="activemq" * @required */ private String configType; /** * Location of activemq config file other those found in resources/config. * * @parameter property="configFile" */ private File configFile; /** * Broker URL. * * @parameter property="url" */ private String url; @Override public void execute() throws MojoExecutionException { File out = outputDirectory; // Create output directory if it doesn't exist. if (!out.exists()) { out.mkdirs(); } String[] args = new String[2]; if (url != null) { args[0] = "start"; args[1] = url; } else { File config; if (configFile != null) { config = configFile; } else { config = new File(configDirectory + File.separator + configType + ".xml"); } try { config = copy(config); } catch (IOException e) { throw new MojoExecutionException(e.getMessage()); } args[0] = "start"; args[1] = "xbean:" + (config.toURI()).toString(); } getLog().info("Starting broker with configuration in: " + args[1]); Main.main(args); } /** * Copy activemq configuration file to output directory. * * @param source * @return * @throws IOException */ public File copy(File source) throws IOException { FileChannel in = null; FileChannel out = null; File dest = new File(outputDirectory.getAbsolutePath() + File.separator + "activemq.xml"); try { in = new FileInputStream(source).getChannel(); out = new FileOutputStream(dest).getChannel(); long size = in.size(); MappedByteBuffer buf = in.map(FileChannel.MapMode.READ_ONLY, 0, size); out.write(buf); } finally { if (in != null) { in.close(); } if (out != null) { out.close(); } } return dest; } }