blob: 4d1638a3e4b734573f95fece52012eb6f595cbd3 [file] [log] [blame]
/*
* 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.felix.obr.plugin;
import java.io.File;
import java.net.URI;
import org.apache.maven.artifact.repository.ArtifactRepository;
import org.apache.maven.plugin.AbstractMojo;
import org.apache.maven.plugin.MojoExecutionException;
import org.apache.maven.plugin.MojoFailureException;
import org.apache.maven.project.MavenProject;
import org.apache.maven.settings.Settings;
/**
* construct the repository.xml from a compiled bundle.
* @description construct the repository.xml from a compiled bundle.
* @goal install-file
* @requiresProject false
* @phase install
* @author <a href="mailto:dev@felix.apache.org">Felix Project Team</a>
*/
public class ObrInstallFile extends AbstractMojo
{
/**
* The local Maven repository.
*
* @parameter expression="${localRepository}"
* @required
*/
private ArtifactRepository m_localRepo;
/**
* path to the repository.xml.
*
* @parameter expression="${repository-path}"
* @require
*/
private String m_repositoryPath;
/**
* setting of maven.
*
* @parameter expression="${settings}"
* @require
*/
private Settings m_settings;
/**
* Artifact Id.
* @description symbolic name define by the user
* @parameter expression="${artifactId}"
*/
private String m_artifactId;
/**
* Group Id.
* @description groupId define by the user
* @parameter expression="${groupId}"
*/
private String m_groupId;
/**
* Version.
* @description version define by the user
* @parameter expression="${version}"
*/
private String m_version;
/**
* Packaging.
* @description packaging define by the user
* @parameter expression="${packaging}"
*/
private String m_packaging;
/**
* OBR File.
* @description obr file define by the user
* @parameter expression="${obr-file}"
*/
private String m_obrFile;
/**
* store user information in a project.
*/
private MavenProject m_project;
/**
* main method for this goal.
* @implements org.apache.maven.plugin.Mojo.execute
* @throws MojoExecutionException if the plugin failed
* @throws MojoFailureException if the plugin failed
*/
public void execute() throws MojoExecutionException, MojoFailureException
{
m_project = new MavenProject();
m_project.setArtifactId( m_artifactId );
m_project.setGroupId( m_groupId );
m_project.setVersion( m_version );
m_project.setPackaging( m_packaging );
PathFile fileOut;
if ( m_groupId == null )
{
getLog().error( "-DgroupId=VALUE is required" );
return;
}
if ( m_artifactId == null )
{
getLog().error( "-Dartifactid=VALUE is required" );
return;
}
if ( m_version == null )
{
getLog().error( "-Dversion=VALUE is required" );
return;
}
if ( m_packaging == null )
{
getLog().error( "-Dpackaging=VALUE is required" );
return;
}
// copy the file to the local repository
PathFile repoLocal = new PathFile( m_localRepo.getBasedir() );
// get the target file in mvn repo
fileOut = new PathFile( PathFile.uniformSeparator( m_settings.getLocalRepository() ) + File.separator
+ m_groupId.replace( '.', File.separatorChar ) + File.separator + m_artifactId + File.separator + m_version
+ File.separator + m_artifactId + "-" + m_version + "." + m_packaging );
if ( !fileOut.isExists() )
{
getLog().error( "file doesn't exist: " + fileOut.getAbsoluteFilename() );
return;
}
else
{
getLog().info( "Target file: " + fileOut.getAbsoluteFilename() );
}
if ( m_repositoryPath == null )
{
m_repositoryPath = "file:" + repoLocal.getOnlyAbsoluteFilename() + "repository.xml";
getLog().info( "-Drepository-path is not set, using default repository: " + m_repositoryPath );
}
PathFile fileRepo = new PathFile( m_repositoryPath );
if ( fileRepo.isRelative() )
{
fileRepo.setBaseDir( m_settings.getLocalRepository() );
}
// create the folder to the repository
PathFile repoExist = new PathFile( fileRepo.getAbsolutePath() );
if ( !repoExist.isExists() )
{
fileRepo.createPath();
}
URI obrXml = ObrUtils.toFileURI( m_obrFile );
if ( null == obrXml )
{
getLog().info( "obr.xml is not present, use default" );
}
// build the user config
Config userConfig = new Config();
ObrUpdate obrUpdate = new ObrUpdate( fileRepo, obrXml, m_project, fileOut.getOnlyAbsoluteFilename(),
m_localRepo.getBasedir(), userConfig, getLog() );
obrUpdate.updateRepository();
}
}