blob: c9fff094f6e55e74a89ef13f7b4ced45c38d7aaa [file] [log] [blame]
package org.apache.maven.archiver;
/*
* 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.
*/
/**
* Capture common manifest configuration.
*
* @author <a href="mailto:brett@apache.org">Brett Porter</a>
* @version $Id$
* @todo is this general enough to be in Plexus Archiver?
*/
public class ManifestConfiguration
{
/**
* The simple layout.
*/
public static final String CLASSPATH_LAYOUT_TYPE_SIMPLE = "simple";
/**
* The layout type
*/
public static final String CLASSPATH_LAYOUT_TYPE_REPOSITORY = "repository";
/**
* custom layout type.
*/
public static final String CLASSPATH_LAYOUT_TYPE_CUSTOM = "custom";
private String mainClass;
private String packageName;
private boolean addClasspath;
private boolean addExtensions;
/**
* This gets prefixed to all classpath entries.
*/
private String classpathPrefix = "";
/**
* Add default implementation entries if this is an extension specification.
*
* @since 2.1
*/
private boolean addDefaultSpecificationEntries;
/**
* Add default implementation entries if this is an extension.
*
* @since 2.1
*/
private boolean addDefaultImplementationEntries;
/**
* The generated Class-Path entry will contains paths that follow the Maven 2 repository layout:
* $groupId[0]/../${groupId[n]/$artifactId/$version/{fileName}
*
* @since 2.3
* @deprecated Use {@link ManifestConfiguration#classpathLayoutType} instead.
*/
private boolean classpathMavenRepositoryLayout = false;
private String classpathLayoutType = CLASSPATH_LAYOUT_TYPE_SIMPLE;
private String customClasspathLayout;
private boolean useUniqueVersions = true;
/**
* @return mainClass
*/
public String getMainClass()
{
return mainClass;
}
/**
* @return the package name.
*/
public String getPackageName()
{
return packageName;
}
/**
* @return if addClasspath true or false.
*/
public boolean isAddClasspath()
{
return addClasspath;
}
/**
* @return {@link #addDefaultImplementationEntries}
*/
public boolean isAddDefaultImplementationEntries()
{
return addDefaultImplementationEntries;
}
/**
* @return {@link #addDefaultSpecificationEntries}
*/
public boolean isAddDefaultSpecificationEntries()
{
return addDefaultSpecificationEntries;
}
/**
* @return {@link #addExtensions}
*/
public boolean isAddExtensions()
{
return addExtensions;
}
/**
* @deprecated Use {@link ManifestConfiguration#getClasspathLayoutType()}, and compare to
* CLASSPATH_LAYOUT_TYPE_SIMPLE or CLASSPATH_LAYOUT_TYPE_REPOSITORY, also declared in
* {@link ManifestConfiguration}.
* @return The state of classpath Maven repository layout.
*/
public boolean isClasspathMavenRepositoryLayout()
{
return classpathMavenRepositoryLayout;
}
/**
* @param addClasspath turn on addClasspath or off.
*/
public void setAddClasspath( boolean addClasspath )
{
this.addClasspath = addClasspath;
}
/**
* @param addDefaultImplementationEntries true to add default implementations false otherwise.
*/
public void setAddDefaultImplementationEntries( boolean addDefaultImplementationEntries )
{
this.addDefaultImplementationEntries = addDefaultImplementationEntries;
}
/**
* @param addDefaultSpecificationEntries add default specifications true/false.
*/
public void setAddDefaultSpecificationEntries( boolean addDefaultSpecificationEntries )
{
this.addDefaultSpecificationEntries = addDefaultSpecificationEntries;
}
/**
* @param addExtensions true to add extensions false otherwise.
*/
public void setAddExtensions( boolean addExtensions )
{
this.addExtensions = addExtensions;
}
/**
* @deprecated Use {@link ManifestConfiguration#setClasspathLayoutType(String)}, and use
* CLASSPATH_LAYOUT_TYPE_SIMPLE, CLASSPATH_LAYOUT_TYPE_CUSTOM, or CLASSPATH_LAYOUT_TYPE_REPOSITORY, also
* declared in {@link ManifestConfiguration}.
* @param classpathMavenRepositoryLayout true/false classpath maven repository
*/
public void setClasspathMavenRepositoryLayout( boolean classpathMavenRepositoryLayout )
{
this.classpathMavenRepositoryLayout = classpathMavenRepositoryLayout;
}
/**
* @param classpathPrefix The prefix.
*/
public void setClasspathPrefix( String classpathPrefix )
{
this.classpathPrefix = classpathPrefix;
}
/**
* @param mainClass The main class.
*/
public void setMainClass( String mainClass )
{
this.mainClass = mainClass;
}
/**
* @param packageName The package name.
*/
public void setPackageName( String packageName )
{
this.packageName = packageName;
}
/**
* @return The classpath prefix.
*/
public String getClasspathPrefix()
{
String cpp = classpathPrefix.replaceAll( "\\\\", "/" );
if ( cpp.length() != 0 && !cpp.endsWith( "/" ) )
{
cpp += "/";
}
return cpp;
}
/**
* Return the type of layout to use when formatting classpath entries. Default is taken from the constant
* CLASSPATH_LAYOUT_TYPE_SIMPLE, declared in this class, which has a value of 'simple'. Other values are:
* 'repository' (CLASSPATH_LAYOUT_TYPE_REPOSITORY, or the same as a maven classpath layout), and 'custom'
* (CLASSPATH_LAYOUT_TYPE_CUSTOM). <br/>
* <b>NOTE:</b> If you specify a type of 'custom' you MUST set
* {@link ManifestConfiguration#setCustomClasspathLayout(String)}.
* @return The classpath layout type.
*/
public String getClasspathLayoutType()
{
// CHECKSTYLE_OFF: LineLength
return CLASSPATH_LAYOUT_TYPE_SIMPLE.equals( classpathLayoutType ) && classpathMavenRepositoryLayout ? CLASSPATH_LAYOUT_TYPE_REPOSITORY
: classpathLayoutType;
// CHECKSTYLE_ON: LineLength
}
/**
* Set the type of layout to use when formatting classpath entries. Should be one of: 'simple'
* (CLASSPATH_LAYOUT_TYPE_SIMPLE), 'repository' (CLASSPATH_LAYOUT_TYPE_REPOSITORY, or the same as a maven classpath
* layout), and 'custom' (CLASSPATH_LAYOUT_TYPE_CUSTOM). The constant names noted here are defined in the
* {@link ManifestConfiguration} class. <br/>
* <b>NOTE:</b> If you specify a type of 'custom' you MUST set
* {@link ManifestConfiguration#setCustomClasspathLayout(String)}.
* @param classpathLayoutType The classpath layout type.
*/
public void setClasspathLayoutType( String classpathLayoutType )
{
this.classpathLayoutType = classpathLayoutType;
}
/**
* Retrieve the layout expression for use when the layout type set in
* {@link ManifestConfiguration#setClasspathLayoutType(String)} has the value 'custom'. <b>The default value is
* null.</b> Expressions will be evaluated against the following ordered list of classpath-related objects:
* <ol>
* <li>The current {@link Artifact} instance, if one exists.</li>
* <li>The current {@link ArtifactHandler} instance from the artifact above.</li>
* </ol>
* <br/>
* <b>NOTE:</b> If you specify a layout type of 'custom' you MUST set this layout expression.
* @return The custom classpath layout.
*/
public String getCustomClasspathLayout()
{
return customClasspathLayout;
}
/**
* Set the layout expression for use when the layout type set in
* {@link ManifestConfiguration#setClasspathLayoutType(String)} has the value 'custom'. Expressions will be
* evaluated against the following ordered list of classpath-related objects:
* <ol>
* <li>The current {@link Artifact} instance, if one exists.</li>
* <li>The current {@link ArtifactHandler} instance from the artifact above.</li>
* </ol>
* <br/>
* <b>NOTE:</b> If you specify a layout type of 'custom' you MUST set this layout expression.
* @param customClasspathLayout The custom classpath layout.
*/
public void setCustomClasspathLayout( String customClasspathLayout )
{
this.customClasspathLayout = customClasspathLayout;
}
/**
* Retrieve the flag for whether snapshot artifacts should be added to the classpath using the
* timestamp/buildnumber version (the default, when this flag is true), or using the generic
* -SNAPSHOT version (when the flag is false). <br/>
* <b>NOTE:</b> If the snapshot was installed locally, this flag will not have an effect on
* that artifact's inclusion, since it will have the same version either way (i.e. -SNAPSHOT naming).
*
* @return The state of {@link #useUniqueVersions}
*/
public boolean isUseUniqueVersions()
{
return useUniqueVersions;
}
/**
* Set the flag for whether snapshot artifacts should be added to the classpath using the timestamp/buildnumber
* version (the default, when this flag is true), or using the generic -SNAPSHOT version (when the flag is false).
* <br/>
* <b>NOTE:</b> If the snapshot was installed locally, this flag will not have an effect on that artifact's
* inclusion, since it will have the same version either way (i.e. -SNAPSHOT naming).
* @param useUniqueVersions true to use unique versions or not.
*/
public void setUseUniqueVersions( boolean useUniqueVersions )
{
this.useUniqueVersions = useUniqueVersions;
}
}