View Javadoc

1   package org.apache.maven.plugin.assembly.mojos;
2   
3   /*
4    * Licensed to the Apache Software Foundation (ASF) under one
5    * or more contributor license agreements.  See the NOTICE file
6    * distributed with this work for additional information
7    * regarding copyright ownership.  The ASF licenses this file
8    * to you under the Apache License, Version 2.0 (the
9    * "License"); you may not use this file except in compliance
10   * with the License.  You may obtain a copy of the License at
11   *
12   *   http://www.apache.org/licenses/LICENSE-2.0
13   *
14   * Unless required by applicable law or agreed to in writing,
15   * software distributed under the License is distributed on an
16   * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
17   * KIND, either express or implied.  See the License for the
18   * specific language governing permissions and limitations
19   * under the License.
20   */
21  
22  import org.apache.maven.archiver.MavenArchiveConfiguration;
23  import org.apache.maven.artifact.repository.ArtifactRepository;
24  import org.apache.maven.execution.MavenSession;
25  import org.apache.maven.plugin.AbstractMojo;
26  import org.apache.maven.plugin.MojoExecutionException;
27  import org.apache.maven.plugin.MojoFailureException;
28  import org.apache.maven.plugin.assembly.AssemblerConfigurationSource;
29  import org.apache.maven.plugin.assembly.InvalidAssemblerConfigurationException;
30  import org.apache.maven.plugin.assembly.archive.ArchiveCreationException;
31  import org.apache.maven.plugin.assembly.archive.AssemblyArchiver;
32  import org.apache.maven.plugin.assembly.format.AssemblyFormattingException;
33  import org.apache.maven.plugin.assembly.io.AssemblyReadException;
34  import org.apache.maven.plugin.assembly.io.AssemblyReader;
35  import org.apache.maven.plugin.assembly.model.Assembly;
36  import org.apache.maven.plugin.assembly.utils.AssemblyFormatUtils;
37  import org.apache.maven.plugin.logging.Log;
38  import org.apache.maven.project.MavenProject;
39  import org.apache.maven.project.MavenProjectHelper;
40  import org.apache.maven.shared.filtering.MavenFileFilter;
41  import org.codehaus.plexus.configuration.PlexusConfiguration;
42  
43  import java.io.File;
44  import java.util.Collections;
45  import java.util.Iterator;
46  import java.util.List;
47  
48  /**
49   * @author <a href="mailto:brett@apache.org">Brett Porter</a>
50   * @author <a href="mailto:vincent.siveton@gmail.com">Vincent Siveton</a>
51   * @version $Id: AbstractAssemblyMojo.java 1207724 2011-11-29 00:56:09Z bimargulies $
52   * @threadSafe
53   */
54  public abstract class AbstractAssemblyMojo
55      extends AbstractMojo
56      implements AssemblerConfigurationSource
57  {
58  	/**
59       * The character encoding scheme to be applied when filtering resources.
60       *
61       * @parameter expression="${encoding}" default-value="${project.build.sourceEncoding}"
62       */
63      protected String encoding;
64  
65      /**
66       * Flag allowing one or more executions of the assembly plugin to be configured as skipped for a particular build.
67       * This makes the assembly plugin more controllable from profiles.
68       * 
69       * @parameter expression="${assembly.skipAssembly}" default-value="false"
70       */
71      private boolean skipAssembly;
72  
73      /**
74       * If this flag is set, everything up to the call to Archiver.createArchive() will be executed.
75       * 
76       * @parameter expression="${assembly.dryRun}" default-value="false"
77       */
78      private boolean dryRun;
79  
80      /**
81       * If this flag is set, the ".dir" suffix will be suppressed in the output directory name when using assembly/format
82       * == 'dir' and other formats that begin with 'dir'. <br/>
83       * <b>NOTE:</b> Since 2.2-beta-3, the default-value for this is true, NOT false as it used to be.
84       * 
85       * @parameter default-value="true"
86       */
87      private boolean ignoreDirFormatExtensions;
88  
89      /**
90       * Local Maven repository where artifacts are cached during the build process.
91       * 
92       * @parameter default-value="${localRepository}"
93       * @required
94       * @readonly
95       */
96      private ArtifactRepository localRepository;
97  
98      /**
99       * @parameter default-value="${project.remoteArtifactRepositories}"
100      * @required
101      * @readonly
102      */
103     private List<ArtifactRepository> remoteRepositories;
104 
105     /**
106      * Contains the full list of projects in the reactor.
107      * 
108      * @parameter default-value="${reactorProjects}"
109      * @required
110      * @readonly
111      */
112     private List<MavenProject> reactorProjects;
113 
114     /**
115      * The output directory of the assembled distribution file.
116      * 
117      * @parameter default-value="${project.build.directory}"
118      * @required
119      */
120     private File outputDirectory;
121 
122     /**
123      * The filename of the assembled distribution file.
124      * 
125      * @parameter default-value="${project.build.finalName}"
126      * @required
127      */
128     private String finalName;
129 
130     /**
131      * Directory to unpack JARs into if needed
132      * 
133      * @parameter default-value="${project.build.directory}/assembly/work"
134      * @required
135      */
136     private File workDirectory;
137     
138     /**
139      * @parameter
140      * 
141      * Specifies the formats of the assembly. 
142      * Multiple formats can be supplied and the Assembly Plugin will generate an archive for each desired formats. 
143      * When deploying your project, all file formats specified will also be deployed. A format is specified by supplying one of the following 
144      * values in a &lt;format&gt subelement:
145      * <ul>
146      * <li><em>zip</em> - Creates a ZIP file format</li>
147      * <li><em>tar</em> - Creates a TAR format</li>
148      * <li><em>tar.gz</em> - Creates a gzip'd TAR format</li>
149      * <li><em>tar.bz2</em> - Creates a bzip'd TAR format</li>
150      * </ul>
151      */
152     private List<String> formats;
153 
154     /**
155      * This is the artifact classifier to be used for the resultant assembly artifact. Normally, you would use the
156      * assembly-id instead of specifying this here.
157      * 
158      * @parameter expression="${classifier}"
159      * @deprecated Please use the Assembly's id for classifier instead
160      */
161     @Deprecated
162     @SuppressWarnings( "unused" )
163     private String classifier;
164 
165     /**
166      * A list of descriptor files to generate from.
167      * 
168      * @parameter
169      */
170     private String[] descriptors;
171 
172     /**
173      * A list of references to assembly descriptors available on the plugin's classpath. The default classpath
174      * includes these built-in descriptors: <code>bin</code>,
175      * <code>jar-with-dependencies</code>, <code>src</code>, and 
176      * <code>project</code>. You can add others by adding dependencies
177      * to the plugin.
178      * 
179      * @parameter
180      */
181     private String[] descriptorRefs;
182 
183     /**
184      * Directory to scan for descriptor files in. <b>NOTE:</b> This may not work correctly with assembly components.
185      * 
186      * @parameter
187      */
188     private File descriptorSourceDirectory;
189 
190     /**
191      * This is the base directory from which archive files are created. This base directory pre-pended to any
192      * <code>&lt;directory&gt;</code> specifications in the assembly descriptor. This is an optional parameter.
193      * 
194      * @parameter
195      */
196     private File archiveBaseDirectory;
197 
198     /**
199      * Predefined Assembly Descriptor Id's. You can select bin, jar-with-dependencies, or src.
200      * 
201      * @parameter expression="${descriptorId}"
202      * @deprecated Please use descriptorRefs instead
203      */
204     @Deprecated
205     protected String descriptorId;
206 
207     /**
208      * Assembly XML Descriptor file. This must be the path to your customized descriptor file.
209      * 
210      * @parameter expression="${descriptor}"
211      * @deprecated Please use descriptors instead
212      */
213     @Deprecated
214     protected String descriptor;
215 
216     /**
217      * Sets the TarArchiver behavior on file paths with more than 100 characters length. Valid values are: "warn"
218      * (default), "fail", "truncate", "gnu", or "omit".
219      * 
220      * @parameter expression="${assembly.tarLongFileMode}" default-value="warn"
221      */
222     private String tarLongFileMode;
223 
224     /**
225      * Base directory of the project.
226      * 
227      * @parameter default-value="${project.basedir}"
228      * @required
229      * @readonly
230      */
231     private File basedir;
232 
233     /**
234      * Maven ProjectHelper.
235      * 
236      * @component
237      */
238     private MavenProjectHelper projectHelper;
239 
240     /**
241      * Maven shared filtering utility.
242      * 
243      * @component
244      */
245     private MavenFileFilter mavenFileFilter;
246 
247     /**
248      * The Maven Session Object
249      * 
250      * @parameter default-value="${session}"
251      * @required
252      * @readonly
253      */
254     private MavenSession mavenSession;
255 
256     /**
257      * Temporary directory that contain the files to be assembled.
258      * 
259      * @parameter default-value="${project.build.directory}/archive-tmp"
260      * @required
261      * @readonly
262      */
263     private File tempRoot;
264 
265     /**
266      * Directory for site generated.
267      * 
268      * @parameter default-value="${project.reporting.outputDirectory}"
269      * @readonly
270      */
271     private File siteDirectory;
272 
273     /**
274      * Set to true to include the site generated by site:site goal.
275      * 
276      * @parameter expression="${includeSite}" default-value="false"
277      * @deprecated Please set this variable in the assembly descriptor instead
278      */
279     @Deprecated
280     private boolean includeSite;
281 
282     /**
283      * Set to false to exclude the assembly id from the assembly final name.
284      * 
285      * @parameter expression="${assembly.appendAssemblyId}" default-value="true"
286      */
287     protected boolean appendAssemblyId;
288 
289     /**
290      * Set to true in order to not fail when a descriptor is missing.
291      * 
292      * @parameter expression="${assembly.ignoreMissingDescriptor}" default-value="false"
293      */
294     protected boolean ignoreMissingDescriptor;
295 
296     /**
297      * This is a set of instructions to the archive builder, especially for building .jar files. It enables you to
298      * specify a Manifest file for the jar, in addition to other options.
299      * 
300      * @parameter
301      */
302     private MavenArchiveConfiguration archive;
303 
304     /**
305      * @parameter
306      */
307     protected List<String> filters;
308 
309     /**
310      * Controls whether the assembly plugin tries to attach the resulting assembly to the project.
311      * 
312      * @parameter expression="${assembly.attach}" default-value="true"
313      * @since 2.2-beta-1
314      */
315     private boolean attach;
316 
317     /**
318      * @component
319      */
320     private AssemblyArchiver assemblyArchiver;
321 
322     /**
323      * @component
324      */
325     private AssemblyReader assemblyReader;
326 
327     /**
328      * Allows additional configuration options that are specific to a particular type of archive format. This is
329      * intended to capture an XML configuration that will be used to reflectively setup the options on the archiver
330      * instance. <br/>
331      * For instance, to direct an assembly with the "ear" format to use a particular deployment descriptor, you should
332      * specify the following for the archiverConfig value in your plugin configuration: <br/>
333      * 
334      * <pre>
335      * &lt;appxml&gt;${project.basedir}/somepath/app.xml&lt;/appxml&gt;
336      * </pre>
337      * 
338      * @parameter
339      * @since 2.2-beta-3
340      */
341     private PlexusConfiguration archiverConfig;
342 
343     /**
344      * This will cause the assembly to run only at the top of a given module tree. That is, run in the project contained
345      * in the same folder where the mvn execution was launched.
346      * 
347      * @parameter expression="${assembly.runOnlyAtExecutionRoot}" default-value="false"
348      * @since 2.2-beta-4
349      */
350     private boolean runOnlyAtExecutionRoot;
351 
352     /**
353      * This will cause the assembly to only update an existing archive, if it exists.
354      * 
355      * @parameter expression="${assembly.updatOnly}" default-value="false"
356      * @since 2.2
357      */
358     private boolean updateOnly;
359 
360     /**
361      * <p>
362      * will use the jvm chmod, this is available for user and all level group level will be ignored
363      * </p>
364      * 
365      * @parameter expression="${assembly.useJvmChmod}" default-value="false"
366      * @since 2.2
367      */
368     private boolean useJvmChmod;
369 
370     /**
371      * <p>
372      * Set to <code>true</code> in order to avoid all chmod calls.
373      * </p>
374      * 
375      * <p>
376      * <b>NOTE:</b> This will cause the assembly plugin to <b>DISREGARD</b> all fileMode/directoryMode settings in the
377      * assembly descriptor, and all file permissions in unpacked dependencies!
378      * </p>
379      * 
380      * @parameter expression="${assembly.ignorePermissions}" default-value="false"
381      * @since 2.2
382      */
383     private boolean ignorePermissions;
384 
385     /**
386      * Create the binary distribution.
387      * 
388      * @throws org.apache.maven.plugin.MojoExecutionException
389      * 
390      */
391     public void execute()
392         throws MojoExecutionException, MojoFailureException
393     {
394         if ( skipAssembly )
395         {
396             getLog().info( "Assemblies have been skipped per configuration of the skipAssembly parameter." );
397             return;
398         }
399 
400         // run only at the execution root.
401         if ( runOnlyAtExecutionRoot && !isThisTheExecutionRoot() )
402         {
403             getLog().info( "Skipping the assembly in this project because it's not the Execution Root" );
404             return;
405         }
406 
407         List<Assembly> assemblies;
408         try
409         {
410             assemblies = assemblyReader.readAssemblies( this );
411         }
412         catch ( final AssemblyReadException e )
413         {
414             throw new MojoExecutionException( "Error reading assemblies: " + e.getMessage(), e );
415         }
416         catch ( final InvalidAssemblerConfigurationException e )
417         {
418             throw new MojoFailureException( assemblyReader, e.getMessage(), "Mojo configuration is invalid: "
419                             + e.getMessage() );
420         }
421 
422         // TODO: include dependencies marked for distribution under certain formats
423         // TODO: how, might we plug this into an installer, such as NSIS?
424 
425         boolean warnedAboutMainProjectArtifact = false;
426         for ( final Iterator<Assembly> assemblyIterator = assemblies.iterator(); assemblyIterator.hasNext(); )
427         {
428             final Assembly assembly = assemblyIterator.next();
429             try
430             {
431                 final String fullName = AssemblyFormatUtils.getDistributionName( assembly, this );
432                 
433                 List<String> effectiveFormats = formats;
434                 if ( effectiveFormats == null || effectiveFormats.size() == 0 )
435                 {
436                     effectiveFormats = assembly.getFormats();
437                 }
438                 if ( effectiveFormats == null || effectiveFormats.size() == 0 ) 
439                 {
440                     throw new MojoFailureException( "No formats specified in the execution parameters or the assembly descriptor.");
441                 }
442 
443                 for ( final String format : effectiveFormats )
444                 {
445                     final File destFile = assemblyArchiver.createArchive( assembly, fullName, format, this );
446 
447                     final MavenProject project = getProject();
448                     final String classifier = getClassifier();
449                     final String type = project.getArtifact()
450                                                .getType();
451 
452                     if ( attach && destFile.isFile() )
453                     {
454                         if ( isAssemblyIdAppended() )
455                         {
456                             projectHelper.attachArtifact( project, format, assembly.getId(), destFile );
457                         }
458                         else if ( classifier != null )
459                         {
460                             projectHelper.attachArtifact( project, format, classifier, destFile );
461                         }
462                         else if ( !"pom".equals( type ) && format.equals( type ) )
463                         {
464                             if ( !warnedAboutMainProjectArtifact )
465                             {
466                                 final StringBuffer message = new StringBuffer();
467 
468                                 message.append( "Configuration options: 'appendAssemblyId' is set to false, and 'classifier' is missing." );
469                                 message.append( "\nInstead of attaching the assembly file: " )
470                                        .append( destFile )
471                                        .append( ", it will become the file for main project artifact." );
472                                 message.append( "\nNOTE: If multiple descriptors or descriptor-formats are provided for this project, the value of this file will be non-deterministic!" );
473 
474                                 getLog().warn( message );
475                                 warnedAboutMainProjectArtifact = true;
476                             }
477 
478                             final File existingFile = project.getArtifact()
479                                                              .getFile();
480                             if ( ( existingFile != null ) && existingFile.exists() )
481                             {
482                                 getLog().warn( "Replacing pre-existing project main-artifact file: " + existingFile
483                                                                + "\nwith assembly file: " + destFile );
484                             }
485 
486                             project.getArtifact()
487                                    .setFile( destFile );
488                         }
489                         else
490                         {
491                             projectHelper.attachArtifact( project, format, null, destFile );
492                         }
493                     }
494                     else if ( attach )
495                     {
496                         getLog().warn( "Assembly file: "
497                                                        + destFile
498                                                        + " is not a regular file (it may be a directory). It cannot be attached to the project build for installation or deployment." );
499                     }
500                 }
501             }
502             catch ( final ArchiveCreationException e )
503             {
504                 throw new MojoExecutionException( "Failed to create assembly: " + e.getMessage(), e );
505             }
506             catch ( final AssemblyFormattingException e )
507             {
508                 throw new MojoExecutionException( "Failed to create assembly: " + e.getMessage(), e );
509             }
510             catch ( final InvalidAssemblerConfigurationException e )
511             {
512                 throw new MojoFailureException( assembly, "Assembly is incorrectly configured: " + assembly.getId(),
513                                                 "Assembly: " + assembly.getId() + " is not configured correctly: "
514                                                                 + e.getMessage() );
515             }
516         }
517     }
518 
519     /**
520      * Returns true if the current project is located at the Execution Root Directory (where mvn was launched)
521      * 
522      * @return
523      */
524     protected boolean isThisTheExecutionRoot()
525     {
526         final Log log = getLog();
527         log.debug( "Root Folder:" + mavenSession.getExecutionRootDirectory() );
528         log.debug( "Current Folder:" + basedir );
529         final boolean result = mavenSession.getExecutionRootDirectory()
530                                            .equalsIgnoreCase( basedir.toString() );
531         if ( result )
532         {
533             log.debug( "This is the execution root." );
534         }
535         else
536         {
537             log.debug( "This is NOT the execution root." );
538         }
539 
540         return result;
541     }
542 
543     protected AssemblyArchiver getAssemblyArchiver()
544     {
545         return assemblyArchiver;
546     }
547 
548     protected AssemblyReader getAssemblyReader()
549     {
550         return assemblyReader;
551     }
552 
553     public File getBasedir()
554     {
555         return basedir;
556     }
557 
558     /**
559      * {@inheritDoc}
560      * 
561      * @deprecated This has been replaced by {@link #getDescriptors()}
562      */
563     @Deprecated
564     public String getDescriptor()
565     {
566         return descriptor;
567     }
568 
569     /**
570      * {@inheritDoc}
571      * 
572      * @deprecated This has been replaced by {@link #getDescriptorReferences()}
573      */
574     @Deprecated
575     public String getDescriptorId()
576     {
577         return descriptorId;
578     }
579 
580     public String[] getDescriptorReferences()
581     {
582         return descriptorRefs;
583     }
584 
585     public File getDescriptorSourceDirectory()
586     {
587         return descriptorSourceDirectory;
588     }
589 
590     public String[] getDescriptors()
591     {
592         return descriptors;
593     }
594 
595     public abstract MavenProject getProject();
596 
597     public File getSiteDirectory()
598     {
599         return siteDirectory;
600     }
601 
602     public boolean isSiteIncluded()
603     {
604         return includeSite;
605     }
606 
607     public String getFinalName()
608     {
609         return finalName;
610     }
611 
612     public boolean isAssemblyIdAppended()
613     {
614         return appendAssemblyId;
615     }
616 
617     public String getTarLongFileMode()
618     {
619         return tarLongFileMode;
620     }
621 
622     public File getOutputDirectory()
623     {
624         return outputDirectory;
625     }
626 
627     public MavenArchiveConfiguration getJarArchiveConfiguration()
628     {
629         return archive;
630     }
631 
632     public File getWorkingDirectory()
633     {
634         return workDirectory;
635     }
636 
637     public ArtifactRepository getLocalRepository()
638     {
639         return localRepository;
640     }
641 
642     public File getTemporaryRootDirectory()
643     {
644         return tempRoot;
645     }
646 
647     public File getArchiveBaseDirectory()
648     {
649         return archiveBaseDirectory;
650     }
651 
652     public List<String> getFilters()
653     {
654         if ( filters == null )
655         {
656             filters = getProject().getBuild()
657                                   .getFilters();
658             if ( filters == null )
659             {
660                 filters = Collections.emptyList();
661             }
662         }
663         return filters;
664     }
665 
666     public List<MavenProject> getReactorProjects()
667     {
668         return reactorProjects;
669     }
670 
671     public String getClassifier()
672     {
673         // TODO Auto-generated method stub
674         return null;
675     }
676 
677     protected MavenProjectHelper getProjectHelper()
678     {
679         return projectHelper;
680     }
681 
682     public void setAppendAssemblyId( final boolean appendAssemblyId )
683     {
684         this.appendAssemblyId = appendAssemblyId;
685     }
686 
687     public void setArchive( final MavenArchiveConfiguration archive )
688     {
689         this.archive = archive;
690     }
691 
692     public void setArchiveBaseDirectory( final File archiveBaseDirectory )
693     {
694         this.archiveBaseDirectory = archiveBaseDirectory;
695     }
696 
697     public void setAssemblyArchiver( final AssemblyArchiver assemblyArchiver )
698     {
699         this.assemblyArchiver = assemblyArchiver;
700     }
701 
702     public void setAssemblyReader( final AssemblyReader assemblyReader )
703     {
704         this.assemblyReader = assemblyReader;
705     }
706 
707     public void setBasedir( final File basedir )
708     {
709         this.basedir = basedir;
710     }
711 
712     public void setClassifier( final String classifier )
713     {
714         this.classifier = classifier;
715     }
716 
717     /**
718      * {@inheritDoc}
719      * 
720      * @deprecated This has been replaced by {@link #setDescriptors(String[])}
721      */
722     @Deprecated
723     public void setDescriptor( final String descriptor )
724     {
725         this.descriptor = descriptor;
726     }
727 
728     /**
729      * {@inheritDoc}
730      * 
731      * @deprecated This has been replaced by {@link #setDescriptorRefs(String[])}
732      */
733     @Deprecated
734     public void setDescriptorId( final String descriptorId )
735     {
736         this.descriptorId = descriptorId;
737     }
738 
739     public void setDescriptorRefs( final String[] descriptorRefs )
740     {
741         this.descriptorRefs = descriptorRefs;
742     }
743 
744     public void setDescriptors( final String[] descriptors )
745     {
746         this.descriptors = descriptors;
747     }
748 
749     public void setDescriptorSourceDirectory( final File descriptorSourceDirectory )
750     {
751         this.descriptorSourceDirectory = descriptorSourceDirectory;
752     }
753 
754     public void setFilters( final List<String> filters )
755     {
756         this.filters = filters;
757     }
758 
759     public void setFinalName( final String finalName )
760     {
761         this.finalName = finalName;
762     }
763 
764     public void setIncludeSite( final boolean includeSite )
765     {
766         this.includeSite = includeSite;
767     }
768 
769     public void setLocalRepository( final ArtifactRepository localRepository )
770     {
771         this.localRepository = localRepository;
772     }
773 
774     public void setOutputDirectory( final File outputDirectory )
775     {
776         this.outputDirectory = outputDirectory;
777     }
778 
779     public void setProjectHelper( final MavenProjectHelper projectHelper )
780     {
781         this.projectHelper = projectHelper;
782     }
783 
784     public void setReactorProjects( final List<MavenProject> reactorProjects )
785     {
786         this.reactorProjects = reactorProjects;
787     }
788 
789     public void setSiteDirectory( final File siteDirectory )
790     {
791         this.siteDirectory = siteDirectory;
792     }
793 
794     public void setTarLongFileMode( final String tarLongFileMode )
795     {
796         this.tarLongFileMode = tarLongFileMode;
797     }
798 
799     public void setTempRoot( final File tempRoot )
800     {
801         this.tempRoot = tempRoot;
802     }
803 
804     public void setWorkDirectory( final File workDirectory )
805     {
806         this.workDirectory = workDirectory;
807     }
808 
809     public List<ArtifactRepository> getRemoteRepositories()
810     {
811         return remoteRepositories;
812     }
813 
814     public boolean isDryRun()
815     {
816         return dryRun;
817     }
818 
819     public boolean isIgnoreDirFormatExtensions()
820     {
821         return ignoreDirFormatExtensions;
822     }
823 
824     public boolean isIgnoreMissingDescriptor()
825     {
826         return ignoreMissingDescriptor;
827     }
828 
829     public void setIgnoreMissingDescriptor( final boolean ignoreMissingDescriptor )
830     {
831         this.ignoreMissingDescriptor = ignoreMissingDescriptor;
832     }
833 
834     public MavenSession getMavenSession()
835     {
836         return mavenSession;
837     }
838 
839     public String getArchiverConfig()
840     {
841         return archiverConfig == null ? null : archiverConfig.toString();
842     }
843 
844     public MavenFileFilter getMavenFileFilter()
845     {
846         return mavenFileFilter;
847     }
848 
849     public boolean isUpdateOnly()
850     {
851         return updateOnly;
852     }
853 
854     public boolean isUseJvmChmod()
855     {
856         return useJvmChmod;
857     }
858 
859     public boolean isIgnorePermissions()
860     {
861         return ignorePermissions;
862     }
863     
864     public String getEncoding() {
865     	return encoding;
866     }
867 }