All Downloads are FREE. Search and download functionalities are using the official Maven repository.

aQute.bnd.ant.WrapTask Maven / Gradle / Ivy

The newest version!
package aQute.bnd.ant;

import java.io.File;
import java.util.ArrayList;
import java.util.List;
import java.util.jar.Manifest;

import org.apache.tools.ant.BuildException;
import org.apache.tools.ant.DirectoryScanner;
import org.apache.tools.ant.types.FileSet;

import aQute.bnd.osgi.Analyzer;
import aQute.bnd.osgi.Constants;
import aQute.bnd.version.Version;
import aQute.libg.qtokens.QuotedTokenizer;

/**
 * Task to wrap a JAR as an OSGi bundle. You can specify the following
 * properties:
 * 
    *
  • bsn and version = Will set the appropriate properties
  • *
  • a classpath
  • *
  • an output directory or an output file if only one JAR is specified
  • *
  • A search directory (definitions) for bnd files named the same as the * source which are used for info
  • *
*/ public class WrapTask extends BaseTask { /** * List of jars to wrap */ List jars = new ArrayList<>(); /** * Output directory or file (directory must be used */ File output = null; File definitions = null; List classpath = new ArrayList<>(); String bsn; Version version; boolean force; boolean failok; boolean exceptions; @Override public void execute() throws BuildException { boolean failed = false; try { if (jars == null) throw new BuildException("No files set", getLocation()); if (output != null && jars.size() > 1 && !output.isDirectory()) { throw new BuildException( "Multiple jars must be wrapped but the output given is not a directory " + output, getLocation()); } if (definitions != null && jars.size() > 1 && !definitions.isDirectory()) { throw new BuildException( "Multiple jars must be wrapped but the definitions parameters is not a directory " + definitions, getLocation()); } for (File file : jars) { if (!file.isFile()) { failed = true; System.err.println("Non existent file to wrap " + file); continue; } try (Analyzer wrapper = new Analyzer()) { wrapper.setPedantic(isPedantic()); wrapper.setTrace(isTrace()); wrapper.setExceptions(exceptions); wrapper.setBase(getProject().getBaseDir()); wrapper.addClasspath(classpath); if (failok) wrapper.setFailOk(true); wrapper.setJar(file); wrapper.addProperties(getProject().getProperties()); wrapper.setDefaults(bsn, version); File outputFile = wrapper.getOutputFile(output == null ? null : output.getAbsolutePath()); if (definitions != null) { File properties = definitions; if (properties.isDirectory()) { String pfile = wrapper.replaceExtension(outputFile.getName(), Constants.DEFAULT_JAR_EXTENSION, Constants.DEFAULT_BND_EXTENSION); properties = new File(definitions, pfile); } if (properties.isFile()) { wrapper.setProperties(properties); } } Manifest manifest = wrapper.calcManifest(); if (wrapper.isOk()) { wrapper.getJar() .setManifest(manifest); boolean saved = wrapper.save(outputFile, force); log(String.format("%30s %6d %s%n", wrapper.getJar() .getBsn() + "-" + wrapper.getJar() .getVersion(), outputFile.length(), saved ? "" : "(not modified)")); } failed |= report(wrapper); } } } catch (Exception e) { if (exceptions) e.printStackTrace(); if (!failok) throw new BuildException("Failed to build jar file: " + e, getLocation()); } if (failed && !failok) throw new BuildException("Failed to wrap jar file", getLocation()); } public void setJars(String files) { addAll(this.jars, files, ","); } void addAll(List list, String files, String separator) { QuotedTokenizer qt = new QuotedTokenizer(files, separator); String entries[] = qt.getTokens(); File project = getProject().getBaseDir(); for (int i = 0; i < entries.length; i++) { File f = getFile(project, entries[i]); if (f.exists()) list.add(f); else messages.NoSuchFile_(f.getAbsoluteFile()); } } public void setClasspath(String files) { addAll(classpath, files, File.pathSeparator + ","); } boolean isFailok() { return failok; } public void setFailok(boolean failok) { this.failok = failok; } public void setForce(boolean force) { this.force = force; } @Override public void setExceptions(boolean exceptions) { this.exceptions = exceptions; } public void setOutput(File output) { this.output = output; } public void setDefinitions(File out) { definitions = out; } public void addConfiguredFileSet(FileSet list) { DirectoryScanner scanner = list.getDirectoryScanner(getProject()); String files[] = scanner.getIncludedFiles(); for (int i = 0; i < files.length; i++) { File f = getFile(scanner.getBasedir(), files[i]); this.jars.add(f); } } public void setVersion(String version) { this.version = new Version(version); } public void setBsn(String bsn) { this.bsn = bsn; } }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy