Java tutorial
package org.codehaus.mojo.minijar.resource; /* * Copyright 2005 The Apache Software Foundation. * * Licensed 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. */ import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.FilterInputStream; import java.io.IOException; import java.io.InputStream; import java.util.jar.JarEntry; import java.util.jar.JarOutputStream; import org.apache.commons.io.IOUtils; import org.vafer.dependency.resources.ResourceHandler; import org.vafer.dependency.resources.Version; import org.vafer.dependency.utils.Jar; public final class LicenseHandler implements ResourceHandler { private File licensesFile; private FileOutputStream licensesOutputStream; public void onStartProcessing(JarOutputStream pOutput) throws IOException { } public void onStartJar(Jar pJar, JarOutputStream pOutput) throws IOException { } public InputStream onResource(Jar jar, String oldName, String newName, Version[] versions, InputStream inputStream) throws IOException { final String s = oldName.toLowerCase(); if ("meta-inf/license.txt".equals(s) || "meta-inf/license".equals(s) || "meta-inf/notice.txt".equals(s) || "meta-inf/notice".equals(s)) { System.out.println(this + " found resource " + oldName); if (licensesFile == null) { licensesFile = File.createTempFile("minijar", "license"); licensesFile.deleteOnExit(); } if (licensesOutputStream == null) { licensesOutputStream = new FileOutputStream(licensesFile); } return new FilterInputStream(inputStream) { public int read() throws IOException { int r = super.read(); if (r > 0) { licensesOutputStream.write(r); } return r; } public int read(byte[] b, int off, int len) throws IOException { int r = super.read(b, off, len); if (r > 0) { licensesOutputStream.write(b, off, r); } return r; } public int read(byte[] b) throws IOException { int r = super.read(b); if (r > 0) { licensesOutputStream.write(b, 0, r); } return r; } }; } return inputStream; } public void onStopJar(Jar pJar, JarOutputStream pOutput) throws IOException { } public void onStopProcessing(JarOutputStream pOutput) throws IOException { if (licensesOutputStream == null) { // no license information aggregated return; } IOUtils.closeQuietly(licensesOutputStream); // insert aggregated license information into new jar final FileInputStream licensesInputStream = new FileInputStream(licensesFile); pOutput.putNextEntry(new JarEntry("LICENSE.txt")); IOUtils.copy(licensesInputStream, pOutput); IOUtils.closeQuietly(licensesInputStream); } }