Class JarArchiver

    • Field Detail

      • META_INF_NAME

        private static final java.lang.String META_INF_NAME
        the name of the meta-inf dir
        See Also:
        Constant Field Values
      • INDEX_NAME

        private static final java.lang.String INDEX_NAME
        The index file name.
        See Also:
        Constant Field Values
      • MANIFEST_NAME

        private static final java.lang.String MANIFEST_NAME
        The manifest file name.
        See Also:
        Constant Field Values
      • configuredManifest

        private Manifest configuredManifest
        merged manifests added through addConfiguredManifest
      • savedConfiguredManifest

        private Manifest savedConfiguredManifest
        shadow of the above if upToDate check alters the value
      • filesetManifest

        private Manifest filesetManifest
        merged manifests added through filesets
      • originalManifest

        private Manifest originalManifest
        Manifest of original archive, will be set to null if not in update mode.
      • filesetManifestConfig

        private JarArchiver.FilesetManifestConfig filesetManifestConfig
        whether to merge fileset manifests; value is true if filesetmanifest is 'merge' or 'mergewithoutmain'
      • mergeManifestsMain

        private boolean mergeManifestsMain
        whether to merge the main section of fileset manifests; value is true if filesetmanifest is 'merge'
      • manifest

        private Manifest manifest
        the manifest specified by the 'manifest' attribute *
      • manifestFile

        private java.io.File manifestFile
        The file found from the 'manifest' attribute. This can be either the location of a manifest, or the name of a jar added through a fileset. If its the name of an added jar, the manifest is looked for in META-INF/MANIFEST.MF
      • index

        private boolean index
        jar index is JDK 1.3+ only
      • createEmpty

        private boolean createEmpty
        whether to really create the archive in createEmptyZip, will get set in getResourcesToAdd.
      • rootEntries

        private java.util.Vector<java.lang.String> rootEntries
        Stores all files that are in the root of the archive (i.e. that have a name that doesn't contain a slash) so they can get listed in the index.

        Will not be filled unless the user has asked for an index.

      • indexJars

        private java.util.ArrayList<java.lang.String> indexJars
        Path containing jars that shall be indexed in addition to this archive.
      • minimalDefaultManifest

        private boolean minimalDefaultManifest
        Creates a minimal default manifest with Manifest-Version: 1.0 only.
    • Constructor Detail

      • JarArchiver

        public JarArchiver()
        constructor
    • Method Detail

      • setIndex

        public void setIndex​(boolean flag)
        Set whether or not to create an index list for classes. This may speed up classloading in some cases.
        Parameters:
        flag - true to create an index
      • setMinimalDefaultManifest

        public void setMinimalDefaultManifest​(boolean minimalDefaultManifest)
        Set whether the default manifest is minimal, thus having only Manifest-Version: 1.0 in it.
        Parameters:
        minimalDefaultManifest - true to create minimal default manifest
      • setManifestEncoding

        @Deprecated
        public void setManifestEncoding​(java.lang.String manifestEncoding)
        Deprecated.
      • addConfiguredManifest

        public void addConfiguredManifest​(Manifest newManifest)
                                   throws ManifestException
        Allows the manifest for the archive file to be provided inline in the build file rather than in an external file.
        Parameters:
        newManifest - The new manifest
        Throws:
        ManifestException
      • setManifest

        public void setManifest​(java.io.File manifestFile)
                         throws ArchiverException
        The manifest file to use. This can be either the location of a manifest, or the name of a jar added through a fileset. If its the name of an added jar, the task expects the manifest to be in the jar at META-INF/MANIFEST.MF.
        Parameters:
        manifestFile - the manifest file to use.
        Throws:
        ArchiverException
      • setFilesetmanifest

        public void setFilesetmanifest​(JarArchiver.FilesetManifestConfig config)
        Behavior when a Manifest is found in a zipfileset or zipgroupfileset file. Valid values are "skip", "merge", and "mergewithoutmain". "merge" will merge all of manifests together, and merge this into any other specified manifests. "mergewithoutmain" merges everything but the Main section of the manifests. Default value is "skip".

        Note: if this attribute's value is not "skip", the created jar will not be readable by using java.util.jar.JarInputStream

        Parameters:
        config - setting for found manifest behavior.
      • addConfiguredIndexJars

        public void addConfiguredIndexJars​(java.io.File indexJar)
        Parameters:
        indexJar - The indexjar
      • createManifest

        protected Manifest createManifest()
                                   throws ArchiverException
        Creates the manifest to be added to the JAR archive. Sub-classes may choose to override this method in order to inspect or modify the JAR manifest file.
        Returns:
        the manifest for the JAR archive.
        Throws:
        ArchiverException
      • createIndexList

        private void createIndexList​(ConcurrentJarCreator zOut)
                              throws java.io.IOException,
                                     ArchiverException
        Create the index list to speed up classloading. This is a JDK 1.3+ specific feature and is enabled by default. See the JAR index specification for more details.
        Parameters:
        zOut - the zip stream representing the jar being built.
        Throws:
        java.io.IOException - thrown if there is an error while creating the index and adding it to the zip stream.
        ArchiverException
      • zipFile

        protected void zipFile​(org.apache.commons.compress.parallel.InputStreamSupplier is,
                               ConcurrentJarCreator zOut,
                               java.lang.String vPath,
                               long lastModified,
                               java.io.File fromArchive,
                               int mode,
                               java.lang.String symlinkDestination,
                               boolean addInParallel)
                        throws java.io.IOException,
                               ArchiverException
        Overridden from Zip class to deal with manifests and index lists.
        Overrides:
        zipFile in class AbstractZipArchiver
        Parameters:
        is - the stream to read data for the entry from.
        zOut - the stream to write to.
        vPath - the name this entry shall have in the archive.
        lastModified - last modification time for the entry.
        fromArchive - the original archive we are copying this
        addInParallel - Indicates if the entry should be add in parallel. If set to false it is added synchronously. If the entry is symbolic link this parameter is ignored.
        Throws:
        java.io.IOException
        ArchiverException
      • writeIndexLikeList

        protected final void writeIndexLikeList​(java.util.List<java.lang.String> dirs,
                                                java.util.List<java.lang.String> files,
                                                java.io.PrintWriter writer)
        Writes the directory entries from the first and the filenames from the second list to the given writer, one entry per line.
        Parameters:
        dirs - The directories
        files - The files
        writer - The printwriter ;)
      • findJarName

        protected static java.lang.String findJarName​(java.lang.String fileName,
                                                      java.lang.String[] classpath)
        try to guess the name of the given file.

        If this jar has a classpath attribute in its manifest, we can assume that it will only require an index of jars listed there. try to find which classpath entry is most likely the one the given file name points to.

        In the absence of a classpath attribute, assume the other files will be placed inside the same directory as this jar and use their basename.

        if there is a classpath and the given file doesn't match any of its entries, return null.

        Parameters:
        fileName - .
        classpath - .
        Returns:
        The guessed name
      • grabFilesAndDirs

        protected static void grabFilesAndDirs​(java.lang.String file,
                                               java.util.List<java.lang.String> dirs,
                                               java.util.List<java.lang.String> files)
                                        throws java.io.IOException
        Grab lists of all root-level files and all directories contained in the given archive.
        Parameters:
        file - .
        files - .
        dirs - .
        Throws:
        java.io.IOException