All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.amitinside.maven.fatjar.plugin.MavenVersionsUpdater Maven / Gradle / Ivy

/*******************************************************************************
 * Copyright (c) 2018 Amit Kumar Mondal
 *
 * All rights reserved. This program and the accompanying materials
 * are made available under the terms of the Eclipse Public License v1.0
 * which accompanies this distribution, and is available at
 * http://www.eclipse.org/legal/epl-v10.html
 *
 *******************************************************************************/
package com.amitinside.maven.fatjar.plugin;

import static com.amitinside.maven.fatjar.plugin.Configurer.Params.*;
import static com.google.common.base.Preconditions.checkArgument;
import static org.twdata.maven.mojoexecutor.MojoExecutor.*;

import java.io.File;
import java.util.List;

import org.apache.maven.execution.MavenSession;
import org.apache.maven.model.Dependency;
import org.apache.maven.plugin.BuildPluginManager;
import org.apache.maven.plugin.MojoExecutionException;
import org.apache.maven.project.MavenProject;
import org.twdata.maven.mojoexecutor.MojoExecutor.Element;

import com.google.common.collect.Lists;

public final class MavenVersionsUpdater {

    private final String mavenHome;
    private final boolean shouldUpdateVersions;
    private final MavenProject mavenProject;
    private final MavenSession mavenSession;
    private final BuildPluginManager pluginManager;
    private final List extensionsToUnarchive;
    private final File sourceLocation;

    private MavenVersionsUpdater(final MavenProject mavenProject, final MavenSession mavenSession,
            final BuildPluginManager pluginManager, final List extensionsToUnarchive) {
        mavenHome = Configurer.INSTANCE.getAsString(MAVEN_LOCATION);
        sourceLocation = (File) Configurer.INSTANCE.get(SOURCE_DIRECTORY);
        final String needUpdate = Configurer.INSTANCE.getAsString(UPDATE_VERSION);
        shouldUpdateVersions = Boolean.valueOf(needUpdate);
        this.mavenProject = mavenProject;
        this.mavenSession = mavenSession;
        this.pluginManager = pluginManager;
        this.extensionsToUnarchive = extensionsToUnarchive;

        checkArgument(!mavenHome.trim().isEmpty(), "Maven Home Location cannot be empty");
    }

    public static MavenVersionsUpdater newInstance(final MavenProject mavenProject, final MavenSession mavenSession,
            final BuildPluginManager pluginManager, final List extensionsToUnarchive) {
        return new MavenVersionsUpdater(mavenProject, mavenSession, pluginManager, extensionsToUnarchive);
    }

    public void update() throws MojoExecutionException {
        if (shouldUpdateVersions) {
            executeVersionsMojo();
        }
        executeDependencyMojo();
    }

    private List getArtefactsToUnarchive() {
        final List deps = Lists.newArrayList();
        for (final Dependency dep : mavenProject.getModel().getDependencies()) {
            final String type = dep.getType();
            if (extensionsToUnarchive.contains(type)) {
                deps.add(dep);
            }
        }
        return deps;
    }

    private Element[] convertToElement(final Dependency dependency) {
        final String groupId = dependency.getGroupId();
        final String artifactid = dependency.getArtifactId();
        final String version = dependency.getVersion();
        final String type = dependency.getType();

        final Element groupIdElement = element(name("groupId"), groupId);
        final Element artifactidElement = element(name("artifactId"), artifactid);
        final Element versionElement = element(name("version"), version);
        final Element typeElement = element(name("type"), type);
        final Element overwriteElement = element(name("overWrite"), "true");
        final Element outputDirElement = element(name("outputDirectory"), sourceLocation.getPath());

        final List elements = Lists.newArrayList(groupIdElement, artifactidElement, versionElement,
                typeElement, overwriteElement, outputDirElement);

        return elements.toArray(new Element[elements.size()]);
    }

    private Element[] convertToArtifactItems() {
        final List artifactItems = Lists.newArrayList();
        for (final Dependency dep : getArtefactsToUnarchive()) {
            final Element artifactItem = element(name("artifactItem"), convertToElement(dep));
            artifactItems.add(artifactItem);
        }
        return artifactItems.toArray(new Element[artifactItems.size()]);
    }

    private void executeDependencyMojo() throws MojoExecutionException {
        //@formatter:off
        executeMojo(
                plugin(
                    groupId("org.apache.maven.plugins"),
                    artifactId("maven-dependency-plugin"),
                    version("3.0.2")
                ),
                goal("copy"),
                configuration(
                    element(name("artifactItems"), convertToArtifactItems())
                ),
                executionEnvironment(
                    mavenProject,
                    mavenSession,
                    pluginManager
                )
            );
        //@formatter:on
    }

    private void executeVersionsMojo() throws MojoExecutionException {
        //@formatter:off
        executeMojo(
                plugin(
                        groupId("org.codehaus.mojo"),
                        artifactId("versions-maven-plugin"),
                        version("2.5")
                        ),
                goal("update-properties"),
                configuration(
                        element(name("generateBackupPoms"), "false")),
                executionEnvironment(
                        mavenProject,
                        mavenSession,
                        pluginManager
                        )
                );
        //@formatter:on
    }

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy