/*
* Copyright 2007-2008 the original author or authors.
*
* 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 org.gradle.api.artifacts.maven;
import groovy.lang.Closure;
import org.gradle.api.Action;
import org.gradle.api.XmlProvider;
import org.gradle.api.artifacts.ConfigurationContainer;
import java.io.Writer;
import java.util.List;
/**
* Is used for generating a Maven POM file and customizing the generation.
* To learn about the Maven POM see: <a href="http://maven.apache.org/pom.html">http://maven.apache.org/pom.html</a>
*/
public interface MavenPom {
String POM_FILE_ENCODING = "UTF-8";
/**
* Returns the scope mappings used for generating this POM.
*/
Conf2ScopeMappingContainer getScopeMappings();
/**
* Provides a builder for the Maven POM for adding or modifying properties of the Maven {@link #getModel()}.
* The syntax is exactly the same as used by polyglot Maven. For example:
*
* <pre>
* pom.project {
* inceptionYear '2008'
* licenses {
* license {
* name 'The Apache Software License, Version 2.0'
* url 'http://www.apache.org/licenses/LICENSE-2.0.txt'
* distribution 'repo'
* }
* }
* }
* </pre>
*
* @param pom
* @return this
*/
MavenPom project(Closure pom);
/**
* Returns the group id for this POM.
*
* @see org.apache.maven.model.Model#setGroupId(String)
*/
String getGroupId();
/**
* Sets the group id for this POM.
*
* @see org.apache.maven.model.Model#getGroupId
* @return this
*/
MavenPom setGroupId(String groupId);
/**
* Returns the artifact id for this POM.
*
* @see org.apache.maven.model.Model#getArtifactId()
*/
String getArtifactId();
/**
* Sets the artifact id for this POM.
*
* @see org.apache.maven.model.Model#setArtifactId(String)
* @return this
*/
MavenPom setArtifactId(String artifactId);
/**
* Returns the version for this POM.
*
* @see org.apache.maven.model.Model#getVersion()
*/
String getVersion();
/**
* Sets the version for this POM.
*
* @see org.apache.maven.model.Model#setVersion(String)
* @return this
*/
MavenPom setVersion(String version);
/**
* Returns the packaging for this POM.
*
* @see org.apache.maven.model.Model#getPackaging()
*/
String getPackaging();
/**
* Sets the packaging for this POM.
*
* @see org.apache.maven.model.Model#setPackaging(String)
* @return this
*/
MavenPom setPackaging(String packaging);
/**
* Sets the dependencies for this POM.
*
* @see org.apache.maven.model.Model#setDependencies(java.util.List)
* @return this
*/
MavenPom setDependencies(List<?> dependencies);
/**
* Returns the dependencies for this POM.
*
* @see org.apache.maven.model.Model#getDependencies()
*/
List<?> getDependencies();
/**
* Returns the underlying native Maven {@link org.apache.maven.model.Model} object. The MavenPom object
* delegates all the configuration information to this object. There Gradle MavenPom objects provides
* delegation methods just for setting the groupId, artifactId, version and packaging. For all other
* elements, either use the model object or {@link #project(groovy.lang.Closure)}.
*
* @return the underlying native Maven object
*/
Object getModel();
/**
* Sets the underlying native Maven {@link org.apache.maven.model.Model} object.
*
* @param model
* @return this
* @see #getModel()
*/
MavenPom setModel(Object model);
/**
* Writes the {@link #getEffectivePom()} XML to a writer while applying the {@link #withXml(org.gradle.api.Action)} actions. Closes the supplied
* Writer when finished.
*
* @param writer The writer to write the POM to.
* @return this
*/
MavenPom writeTo(Writer writer);
/**
* Writes the {@link #getEffectivePom()} XML to a file while applying the {@link #withXml(org.gradle.api.Action)} actions.
* The path is resolved as defined by {@link org.gradle.api.Project#files(Object...)}
* The file will be encoded as UTF-8.
*
* @param path The path of the file to write the POM into.
* @return this
*/
MavenPom writeTo(Object path);
/**
* <p>Adds a closure to be called when the POM has been configured. The POM is passed to the closure as a
* parameter.</p>
*
* @param closure The closure to execute when the POM has been configured.
* @return this
*/
MavenPom whenConfigured(Closure closure);
/**
* <p>Adds an action to be called when the POM has been configured. The POM is passed to the action as a
* parameter.</p>
*
* @param action The action to execute when the POM has been configured.
* @return this
*/
MavenPom whenConfigured(Action<MavenPom> action);
/**
* <p>Adds a closure to be called when the POM XML has been created. The XML is passed to the closure as a
* parameter in form of a {@link org.gradle.api.XmlProvider}. The action can modify the XML.</p>
*
* @param closure The closure to execute when the POM XML has been created.
* @return this
*/
MavenPom withXml(Closure closure);
/**
* <p>Adds an action to be called when the POM XML has been created. The XML is passed to the action as a
* parameter in form of a {@link org.gradle.api.XmlProvider}. The action can modify the XML.</p>
*
* @param action The action to execute when the POM XML has been created.
* @return this
*/
MavenPom withXml(Action<XmlProvider> action);
/**
* Returns the configuration container used for mapping configurations to Maven scopes.
*/
ConfigurationContainer getConfigurations();
/**
* Sets the configuration container used for mapping configurations to Maven scopes.
* @return this
*/
MavenPom setConfigurations(ConfigurationContainer configurations);
/**
* Returns a POM with the generated dependencies and the {@link #whenConfigured(org.gradle.api.Action)} actions applied.
*
* @return the effective POM
*/
MavenPom getEffectivePom();
}