package org.codehaus.mojo.flatten; /* * 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. */ import org.apache.maven.model.Model; /** * This enum contains the predefined modes how to deal with {@link FlattenDescriptor additional POM elements} when * {@link FlattenMojo generating the flattened POM}. * * @author Joerg Hohwiller (hohwille at users.sourceforge.net) * @since 1.0.0-beta-2 */ public enum FlattenMode { /** * For projects that want to keep all {@link FlattenDescriptor optional POM elements}. * * @deprecated confusing name, unstable contract. */ @Deprecated minimum, /** * For Open-Source-Software projects that want to keep all {@link FlattenDescriptor optional POM elements} except * for {@link Model#getRepositories() repositories} and {@link Model#getPluginRepositories() pluginRepositories}. */ oss, /** * Keeps all {@link FlattenDescriptor optional POM elements} that are required for * <a href="https://docs.sonatype.org/display/Repository/Sonatype+OSS+Maven+Repository+Usage+Guide">OSS * Repository-Hosting</a>. */ ossrh, /** * Like {@link #ossrh} but additionally keeps {@link Model#getDependencyManagement() dependencyManagement} and * {@link Model#getProperties() properties}. Especially it will keep the {@link Model#getDependencyManagement() * dependencyManagement} <em>as-is</em> without resolving parent influences and import-scoped dependencies. This is * useful if your POM represents a <a href= * "http://maven.apache.org/guides/introduction/introduction-to-dependency-mechanism.html#Importing_Dependencies" * >BOM (Bill Of Material)</a> and you do not want to deploy it as is (to remove parent and resolve version * variables, etc.). */ bom, /** * The default mode that removes all {@link FlattenDescriptor optional POM elements} except * {@link Model#getRepositories() repositories}. */ defaults, /** Removes all {@link FlattenDescriptor optional POM elements}. */ clean, /** Removes all {@link FlattenDescriptor optional POM elements} and dependencies. */ fatjar, /** Only resolves variables revision, sha1 and changelist. Keeps everything else. * See <a href="https://maven.apache.org/maven-ci-friendly.html">Maven CI Friendly</a> for further details. */ resolveCiFriendliesOnly; /** * @return the {@link FlattenDescriptor} defined by this {@link FlattenMode}. */ public FlattenDescriptor getDescriptor() { FlattenDescriptor descriptor = new FlattenDescriptor(); switch (this) { case minimum: descriptor.setPluginRepositories(ElementHandling.expand); // $FALL-THROUGH$ case bom: // MOJO-2041 descriptor.setDependencyManagement(ElementHandling.keep); descriptor.setProperties(ElementHandling.expand); // $FALL-THROUGH$ case oss: descriptor.setCiManagement(ElementHandling.expand); descriptor.setContributors(ElementHandling.expand); descriptor.setDistributionManagement(ElementHandling.expand); descriptor.setInceptionYear(ElementHandling.expand); descriptor.setIssueManagement(ElementHandling.expand); descriptor.setMailingLists(ElementHandling.expand); descriptor.setOrganization(ElementHandling.expand); descriptor.setPrerequisites(ElementHandling.expand); // $FALL-THROUGH$ case ossrh: descriptor.setName(ElementHandling.expand); descriptor.setDescription(ElementHandling.expand); descriptor.setUrl(ElementHandling.expand); descriptor.setScm(ElementHandling.expand); descriptor.setDevelopers(ElementHandling.expand); // $FALL-THROUGH$ case defaults: descriptor.setRepositories(ElementHandling.expand); break; case fatjar: descriptor.setDependencies(ElementHandling.remove); break; case resolveCiFriendliesOnly: descriptor.setBuild(ElementHandling.interpolate); descriptor.setCiManagement(ElementHandling.interpolate); descriptor.setContributors(ElementHandling.interpolate); descriptor.setDependencies(ElementHandling.interpolate); descriptor.setDependencyManagement(ElementHandling.interpolate); descriptor.setDescription(ElementHandling.interpolate); descriptor.setDevelopers(ElementHandling.interpolate); descriptor.setDistributionManagement(ElementHandling.interpolate); descriptor.setInceptionYear(ElementHandling.interpolate); descriptor.setIssueManagement(ElementHandling.interpolate); descriptor.setMailingLists(ElementHandling.interpolate); descriptor.setModules(ElementHandling.interpolate); descriptor.setName(ElementHandling.interpolate); descriptor.setOrganization(ElementHandling.interpolate); descriptor.setParent(ElementHandling.resolve); descriptor.setPluginManagement(ElementHandling.interpolate); descriptor.setPluginRepositories(ElementHandling.interpolate); descriptor.setPrerequisites(ElementHandling.interpolate); descriptor.setProfiles(ElementHandling.interpolate); descriptor.setProperties(ElementHandling.interpolate); descriptor.setReporting(ElementHandling.interpolate); descriptor.setRepositories(ElementHandling.interpolate); descriptor.setScm(ElementHandling.interpolate); descriptor.setUrl(ElementHandling.interpolate); descriptor.setVersion(ElementHandling.resolve); break; case clean: // nothing to do... break; default: // nothing to do...Could not happen. break; } return descriptor; } }