| 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; |
| } |
| } |