Package com.alibaba.citrus.maven.eclipse

Source Code of com.alibaba.citrus.maven.eclipse.PdeEclipsePlugin

/*
* Copyright (c) 2002-2013 Alibaba Group Holding Limited.
* All rights reserved.
*
* 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 com.alibaba.citrus.maven.eclipse;

import java.io.File;
import java.io.IOException;

import com.alibaba.citrus.maven.eclipse.base.eclipse.EclipsePlugin;
import com.alibaba.citrus.maven.eclipse.base.eclipse.writers.EclipseClasspathWriter;
import com.alibaba.citrus.maven.eclipse.base.eclipse.writers.EclipseOSGiManifestWriter;
import com.alibaba.citrus.maven.eclipse.base.eclipse.writers.EclipseProjectWriter;
import com.alibaba.citrus.maven.eclipse.base.eclipse.writers.EclipseWriter;
import com.alibaba.citrus.maven.eclipse.base.eclipse.writers.EclipseWriterConfig;
import com.alibaba.citrus.maven.eclipse.base.ide.IdeDependency;
import org.apache.commons.io.FileUtils;
import org.apache.maven.plugin.MojoExecutionException;
import org.codehaus.plexus.util.xml.XMLWriter;

/**
* Modification on the original eclipse:eclipse plugin, to ignore osgi dependencies in pde project.
*
* @author Michael Zhou
* @goal pde-eclipse
*/
public class PdeEclipsePlugin extends EclipsePlugin {
    /**
     * if set ignoreOsgiBundle=true in a PDE project, it will include all dependencies of project.
     * If not, the OSGI dependencies will be excluded.
     * <p/>
     *
     * @parameter expression="${eclipse.ignoreOsgiBundle}" default-value="false"
     */
    private boolean ignoreOsgiBundle;

    /**
     * if a libdir is specified, e.g. "lib", in a PDE project, it will copy dependencies into this folder
     * instead of creating resource links for them.
     * <p/>
     *
     * @parameter expression="${eclipse.libdir}"
     */
    private String libdir;

    @Override
    protected IdeDependency[] doDependencyResolution() throws MojoExecutionException {
        IdeDependency[] deps = super.doDependencyResolution();

        if (ignoreOsgiBundle) {
            for (int i = 0; i < deps.length; i++) {
                IdeDependency dep = deps[i];

                if (dep.isOsgiBundle()) {
                    deps[i] = new IdeDependency(dep.getGroupId(),
                                                dep.getArtifactId(),
                                                dep.getVersion(),
                                                dep.getClassifier(),
                                                dep.isReferencedProject(),
                                                dep.isTestDependency(),
                                                dep.isSystemScoped(),
                                                dep.isProvided(),
                                                dep.isAddedToClasspath(),
                                                dep.getFile(),
                                                dep.getType(),
                                                false, // force to be false
                                                null,
                                                -1,
                                                dep.getEclipseProjectName());
                }
            }
        }

        if (isPdeProject() && libdir != null) {
            for (int j = 0; j < deps.length; j++) {
                IdeDependency dep = deps[j];

                if (!dep.isProvided() && !dep.isReferencedProject() && !dep.isTestDependency() && !dep.isOsgiBundle() && dep.getFile() != null) {
                    File lib = new File(getProject().getBasedir(), libdir);
                    File srcfile = dep.getFile();

                    getLog().info("Copying " + srcfile.getName() + " to " + lib.getAbsolutePath());

                    try {
                        FileUtils.copyFileToDirectory(srcfile, lib);
                    } catch (IOException e) {
                        getLog().error("Failed to copy " + srcfile.getName() + " to " + lib.getAbsolutePath(), e);
                    }
                }
            }
        }

        return deps;
    }

    @Override
    protected EclipseWriter getEclipseClasspathWriter(EclipseWriterConfig config) {
        return new EclipseClasspathWriter() {
            @Override
            protected String getDependencyPathForPde(String name) {
                return addLibdir(name);
            }
        }.init(getLog(), config);
    }

    @Override
    protected EclipseWriter getEclipseProjectWriter(EclipseWriterConfig config) {
        return new EclipseProjectWriter() {
            @Override
            protected void writeResourceLinksForPdeProject(XMLWriter writer, IdeDependency[] dependencies)
                    throws MojoExecutionException {
                if (libdir == null) {
                    super.writeResourceLinksForPdeProject(writer,
                                                          dependencies);
                }
            }
        }.init(getLog(), config);
    }

    @Override
    @Deprecated
    protected EclipseWriter getEclipseOSGiManifestWriter(EclipseWriterConfig config) {
        return new EclipseOSGiManifestWriter() {
            @Override
            protected String getDependencyPathForPde(String name) {
                return addLibdir(name);
            }
        }.init(getLog(), config);
    }

    private String addLibdir(String name) {
        if (libdir == null) {
            return name;
        } else {
            return (libdir + "/" + name).replace("^/+", "").replace("/+", "/");
        }
    }
}
TOP

Related Classes of com.alibaba.citrus.maven.eclipse.PdeEclipsePlugin

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.