
org.bitstrings.maven.nbm.utils.JarUtils Maven / Gradle / Ivy
The newest version!
package org.bitstrings.maven.nbm.utils;
import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.net.URI;
import java.util.Map;
import java.util.jar.Attributes;
import java.util.jar.JarEntry;
import java.util.jar.JarInputStream;
import java.util.jar.JarOutputStream;
import java.util.jar.Manifest;
import org.codehaus.plexus.util.FileUtils;
import org.codehaus.plexus.util.IOUtil;
import com.google.common.io.Closer;
// +p
public final class JarUtils
{
public static final String MANIFEST_JAR_ENTRY = "META-INF/MANIFEST.MF";
public static final String MANIFEST_ATTR_PERMISSIONS = "Permissions";
public static final String MANIFEST_ATTR_CODEBASE = "Codebase";
public static final String MANIFEST_ATTR_APPLICATION_NAME = "Application-Name";
public static final String MANIFEST_ATTR_TRUSTED_ONLY = "Trusted-Only";
public static final String MANIFEST_ATTR_TRUSTED_LIBRARY = "Trusted-Library";
public static final String MANIFEST_ATTR_CLASS_PATH = "Class-Path";
public static final String
MANIFEST_ATTR_APPLICATION_LIBRARY_ALLOWABLE_CODEBASE = "Application-Library-Allowable-Codebase";
public static final String
MANIFEST_ATTR_CALLER_ALLOWABLE_CODEBASE = "Caller-Allowable-Codebase";
private JarUtils() {}
public static void unsignArchive( final File jarFile )
throws IOException
{
archiveModifier( jarFile, null, null, true, null );
}
/**
* Removes any existing signatures from the specified JAR file. We will stream from the input JAR directly to the
* output JAR to retain as much metadata from the original JAR as possible.
*
* @param inJar The JAR file to unsign, must not be null
.
* @throws unsignArchive If the unsigning failed.
*/
public static void archiveModifier(
final File inJar, final File outJar,
Integer compressionLevel,
boolean unsign,
Attributes attributes )
throws IOException
{
File workJar =
outJar == null
? new File( inJar.getAbsolutePath() + ".tmp" )
: outJar;
Closer closer = Closer.create();
try
{
final JarInputStream jis =
closer.register( new JarInputStream( new BufferedInputStream( new FileInputStream( inJar ) ) ) );
final Manifest manifest = getManifest( inJar );
// 1- remove any existing digest
// remove all manifest entries (problem when validating non-files entries)
if ( unsign )
{
final Map entries = manifest.getEntries();
entries.clear();
/*
for ( Iterator> entryIter = entries.entrySet().iterator() ;
entryIter.hasNext(); )
{
final Map.Entry entry = entryIter.next();
for ( Iterator
© 2015 - 2025 Weber Informatics LLC | Privacy Policy