/* * Copyright 2005-2006 The Apache Software Foundation. * * 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 org.apache.servicemix.maven.plugin.jbi; import java.io.File; import java.util.ArrayList; import java.util.Collection; import java.util.Iterator; import java.util.List; import org.apache.maven.artifact.Artifact; import org.apache.maven.artifact.repository.ArtifactRepository; import org.apache.maven.plugin.MojoExecutionException; import org.apache.maven.plugin.MojoFailureException; import org.apache.maven.project.MavenProject; import org.apache.maven.project.MavenProjectBuilder; import org.apache.maven.project.ProjectBuildingException; /** * A Mojo that can take any project and determine its JBI dependencies and then * install it and its dependencies using the JBI deployment tasks * * @author Philip Dodds * @version $Id: GenerateComponentDescriptorMojo 314956 2005-10-12 16:27:15Z * brett $ * @goal projectInstall * @requiresDependencyResolution runtime * @description installs the project (and all dependencies) to a local * ServiceMix instance */ public class JbiProjectDeployerMojo extends AbstractJbiMojo { private List deploymentTypes; /** * @parameter default-value="${project}" */ private MavenProject project; /** * @component */ private MavenProjectBuilder pb; /** * @parameter default-value="${localRepository}" */ private ArtifactRepository localRepo; /** * @parameter default-value="${project.remoteArtifactRepositories}" */ private List remoteRepos; public void execute() throws MojoExecutionException, MojoFailureException { getLog().debug(" ======= JbiProjectDeployerMojo settings ======="); if (!getDeployablePackagingTypes().contains(project.getPackaging())) { throw new MojoExecutionException( "Project must be of packaging type [" + getDeployablePackagingTypes() + "]"); } List dependencies = resolveDependencies(project); getLog().info( project.getName() + " has " + dependencies.size() + " child dependencies"); for (Iterator iter = dependencies.iterator(); iter.hasNext();) { getLog().info("Deploying " + iter.next()); } } private List getDeployablePackagingTypes() { if (deploymentTypes == null) { deploymentTypes = new ArrayList(); deploymentTypes.add("jbi-shared-library"); deploymentTypes.add("jbi-service-assembly"); deploymentTypes.add("jbi-component"); } return deploymentTypes; } private Collection resolveArtifact(Artifact artifact) { MavenProject project = null; List dependencies = new ArrayList(); try { project = pb.buildFromRepository(artifact, remoteRepos, localRepo, true); } catch (ProjectBuildingException e) { getLog().warn( "Unable to determine packaging for dependency : " + artifact.getArtifactId() + " assuming jar"); } if (project != null) { if (getDeployablePackagingTypes().contains(project.getPackaging())) { // So why is this always 0 project.getAttachedArtifacts().size(); dependencies.add(resolveDeploymentPackage(project)); dependencies.addAll(resolveDependencies(project)); } } return dependencies; } private List resolveDependencies(MavenProject project) { List dependencies = new ArrayList(); for (Iterator iter = project.getArtifacts().iterator(); iter.hasNext();) { Artifact artifact = (Artifact) iter.next(); dependencies.addAll(resolveArtifact(artifact)); } return dependencies; } private File resolveDeploymentPackage(MavenProject project) { // So why is this always 0 project.getAttachedArtifacts().size(); getLog().info( "Artifacts = " + project.getArtifacts().size() + " " + project.getExtensionArtifacts().size()); return null; } }