001 /**
002 * Licensed to the Apache Software Foundation (ASF) under one
003 * or more contributor license agreements. See the NOTICE file
004 * distributed with this work for additional information
005 * regarding copyright ownership. The ASF licenses this file
006 * to you under the Apache License, Version 2.0 (the
007 * "License"); you may not use this file except in compliance
008 * with the License. You may obtain a copy of the License at
009 *
010 * http://www.apache.org/licenses/LICENSE-2.0
011 *
012 * Unless required by applicable law or agreed to in writing,
013 * software distributed under the License is distributed on an
014 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
015 * KIND, either express or implied. See the License for the
016 * specific language governing permissions and limitations
017 * under the License.
018 */
019
020 package org.apache.geronimo.mavenplugins.car;
021
022 import org.apache.geronimo.kernel.repository.WriteableRepository;
023 import org.apache.geronimo.system.repository.Maven2Repository;
024
025 import org.codehaus.mojo.pluginsupport.util.ArtifactItem;
026
027 import org.apache.maven.plugin.MojoExecutionException;
028 import org.apache.maven.artifact.Artifact;
029
030 import java.io.File;
031
032 /**
033 * Installs one or more artifacts into a local Geronimo repository.
034 *
035 * @goal install-artifacts
036 *
037 * @version $Rev: 524717 $ $Date: 2007-04-01 23:39:19 -0400 (Sun, 01 Apr 2007) $
038 */
039 public class InstallArtifactsMojo
040 extends AbstractCarMojo
041 {
042 /**
043 * The location of the target repository to install artifacts into.
044 *
045 * @parameter
046 * @required
047 */
048 private File repositoryDirectory = null;
049
050 /**
051 * A array {@link ArtifactItem} instances to be installed into the repository.
052 *
053 * @parameter
054 * @required
055 */
056 private ArtifactItem[] artifacts = null;
057
058 /**
059 * Flag to indicate that if an artifact exists already, that we should delete it and re-install.
060 *
061 * @parameter default-value="true"
062 */
063 private boolean force = true;
064
065 protected void doExecute() throws Exception {
066 if (!repositoryDirectory.exists()) {
067 repositoryDirectory.mkdirs();
068 log.info("Created directory: " + repositoryDirectory);
069 }
070 else if (!repositoryDirectory.isDirectory()) {
071 throw new MojoExecutionException("Invalid reposiory directory: " + repositoryDirectory);
072 }
073
074 WriteableRepository repository = new Maven2Repository(repositoryDirectory);
075
076 // Install all of the artifacts we were asked to...
077 for (int i=0; i<artifacts.length; i++) {
078 Artifact artifact = getArtifact(artifacts[i]);
079 log.info("Installing: " + artifact);
080
081 org.apache.geronimo.kernel.repository.Artifact gartifact = mavenArtifactToGeronimo(artifact);
082 if (repository.contains(gartifact)) {
083 if (force) {
084 File file = repository.getLocation(gartifact);
085 log.debug("Force deletion of: " + file);
086
087 if (!file.delete()) {
088 throw new MojoExecutionException("Failed to delete artifact from repository: " + artifacts[i]);
089 }
090 }
091 else {
092 throw new MojoExecutionException("Artifact already exists in repository: " + artifacts[i]);
093 }
094 }
095
096 repository.copyToRepository(artifact.getFile(), gartifact, null);
097 }
098 }
099
100 /**
101 * Convert a Maven artifact into a the Geronimo flavor.
102 */
103 private org.apache.geronimo.kernel.repository.Artifact mavenArtifactToGeronimo(final Artifact artifact) {
104 assert artifact != null;
105
106 return new org.apache.geronimo.kernel.repository.Artifact(
107 artifact.getGroupId(),
108 artifact.getArtifactId(),
109 artifact.getVersion(),
110 artifact.getType()
111 );
112 }
113 }