Class Builder

All Implemented Interfaces:
Constants, Registry, Report, Reporter, Closeable, AutoCloseable, Iterable<String>
Direct Known Subclasses:
JUnitFramework.BundleBuilder, ProjectBuilder

public class Builder extends Analyzer
Include-Resource: ( [name '=' ] file )+ Private-Package: package-decl ( ',' package-decl )* Export-Package: package-decl ( ',' package-decl )* Import-Package: package-decl ( ',' package-decl )* @version $Revision: 1.27 $
  • Field Details

  • Constructor Details

    • Builder

      public Builder(Processor parent)
    • Builder

      public Builder(Builder parent)
    • Builder

      public Builder()
  • Method Details

    • build

      public Jar build() throws Exception
      Throws:
      Exception
    • getBuildJar

      private Jar getBuildJar()
    • doPom

      void doPom(Jar dot) throws Exception, IOException
      Throws:
      Exception
      IOException
    • doDigests

      private void doDigests(Jar dot) throws Exception
      Check if we need to calculate any checksums.
      Parameters:
      dot -
      Throws:
      Exception
    • init

      public void init() throws Exception
      Allow any local initialization by subclasses before we build.
      Throws:
      Exception
    • doWab

      private Jar doWab(Jar dot) throws Exception
      Turn this normal bundle in a web and add any resources.
      Throws:
      Exception
    • pathStartsWith

      private static boolean pathStartsWith(String path, String prefix)
    • addWabLib

      private void addWabLib(Jar dot, File f, String name, Map<String,String> attrs) throws Exception
      Add a wab lib to the jar.
      Parameters:
      f -
      Throws:
      Exception
    • doSaveManifest

      private void doSaveManifest(Jar dot) throws Exception
      Get the manifest and write it out separately if -savemanifest is set
      Parameters:
      dot -
      Throws:
      Exception
    • changedFile

      protected void changedFile(File f)
    • sign

      void sign(Jar jar) throws Exception
      Sign the jar file. -sign : [ ';' 'password:=' ] [ ';' 'keystore:=' ] [ ';' 'sign-password:=' ] ( ',' ... )*
      Throws:
      Exception
    • hasSources

      public boolean hasSources()
    • getExtra

      protected Jar getExtra() throws Exception
      Answer extra packages. In this case we implement conditional package. Any
      Overrides:
      getExtra in class Analyzer
      Throws:
      Exception
    • analyze

      public void analyze() throws Exception
      Intercept the call to analyze and cleanup versions after we have analyzed the setup. We do not want to cleanup if we are going to verify.
      Overrides:
      analyze in class Analyzer
      Throws:
      IOException
      Exception
    • doSnapshot

      private String doSnapshot(String version)
    • cleanupVersion

      public void cleanupVersion(Packages packages, String defaultVersion)
    • cleanupVersion

      public void cleanupVersion(Packages packages, String defaultVersion, String what)
    • addSources

      private void addSources(Jar dot) throws Exception
      Throws:
      IOException
      Exception
    • getSourcePath

      public Collection<File> getSourcePath()
    • doVerify

      private void doVerify(Jar dot) throws Exception
      Throws:
      Exception
    • doExpand

      private void doExpand(Jar dot) throws Exception
      Throws:
      Exception
    • doExpand

      private Set<Instruction> doExpand(Jar jar, MultiMap<String,Jar> index, Instructions filter) throws Exception
      Destructively filter the packages from the build up index. This index is used by the Export Package as well as the Private Package
      Throws:
      Exception
    • filterFrom

      private List<Jar> filterFrom(Instruction from, List<Jar> providers)
      Parameters:
      from -
    • copyPackage

      private void copyPackage(Jar dest, List<Jar> providers, String path, int splitStrategy)
      Copy the package from the providers based on the split package strategy.
    • copy

      private void copy(Jar dest, Jar srce, String path, boolean overwrite)
      Copy
    • diagnostic

      private String diagnostic(String pack, List<Jar> culprits)
      Analyze the classpath for a split package
    • getSplitStrategy

      private int getSplitStrategy(String type)
    • matches

      private Instruction matches(Instructions instructions, String pack, Set<Instruction> unused, String source)
      Matches the instructions against a package.
      Parameters:
      instructions - The list of instructions
      pack - The name of the package
      unused - The total list of patterns, matched patterns are removed
      source - The name of the source container, can be filtered upon with the from: directive.
    • doIncludeResources

      private void doIncludeResources(Jar jar) throws Exception
      Parse the Bundle-Includes header. Files in the bundles Include header are included in the jar. The source can be a directory or a file.
      Throws:
      IOException
      FileNotFoundException
      Exception
    • doIncludeResource

      private void doIncludeResource(Jar jar, String includes) throws Exception
      Throws:
      Exception
    • doIncludeResource

      private void doIncludeResource(Jar jar, Parameters clauses) throws ZipException, IOException, Exception
      Throws:
      ZipException
      IOException
      Exception
    • doIncludeResource

      private void doIncludeResource(Jar jar, String name, Map<String,String> extra) throws ZipException, IOException, Exception
      Throws:
      ZipException
      IOException
      Exception
    • doClassAttribute

      private void doClassAttribute(Jar jar, String name, Map<String,String> extra, Instructions preprocess, boolean absentIsOk) throws Exception
      Throws:
      Exception
    • getPreProcessMatcher

      private Instructions getPreProcessMatcher(Map<String,String> extra)
    • doCommand

      private void doCommand(Jar jar, String source, String destination, Map<String,String> extra, Instructions preprocess, boolean absentIsOk) throws Exception
      It is possible in Include-Resource to use a system command that generates the contents, this is indicated with cmd attribute. The command can be repeated for a number of source files with the for attribute which indicates a list of repetitions, often down with the Macro._lsa(String[]) or Macro#_lsb(String[]) macro. The repetition will repeat the given command for each item. The @} macro can be used to replace the current item. If no for is given, the source is used as the only item. If the destination contains a macro, each iteration will create a new file, otherwise the destination name is used.
      Parameters:
      jar -
      source -
      destination -
      extra -
      preprocess -
      absentIsOk -
      Throws:
      Exception
    • traverse

      private void traverse(List<String> paths, File item)
    • findLastModifiedWhileOlder

      private long findLastModifiedWhileOlder(File file, long lastModified)
      Check if a file or directory is older than the given time.
      Parameters:
      file -
      lastModified -
    • doResourceDirectory

      private String doResourceDirectory(Jar jar, Map<String,String> extra, Instructions preprocess, File sourceFile, String destinationPath) throws Exception
      Throws:
      Exception
    • resolveFiles

      private void resolveFiles(File dir, FileFilter filter, boolean recursive, String path, Map<String,File> files, boolean flatten)
    • noSuchFile

      private void noSuchFile(Jar jar, String clause, Map<String,String> extra, String source, String destinationPath) throws Exception
      Throws:
      Exception
    • extractFromJar

      private void extractFromJar(Jar jar, String source, String destination, boolean absentIsOk) throws ZipException, IOException
      Extra resources from a Jar and add them to the given jar.
      Throws:
      ZipException
      IOException
    • addAll

      public boolean addAll(Jar to, Jar sub, Instruction filter)
      Add all the resources in the given jar that match the given filter.
      Parameters:
      sub - the jar
      filter - a pattern that should match the resoures in sub to be added
    • addAll

      public boolean addAll(Jar to, Jar sub, Instruction filter, String destination)
      Add all the resources in the given jar that match the given filter.
      Parameters:
      sub - the jar
      filter - a pattern that should match the resoures in sub to be added
    • copy

      private void copy(Jar jar, String path, File from, Instructions preprocess, Map<String,String> extra) throws Exception
      Throws:
      Exception
    • copy

      private void copy(Jar jar, String path, Resource resource, Map<String,String> extra)
    • setSourcepath

      public void setSourcepath(File[] files)
    • addSourcepath

      public void addSourcepath(File cp)
    • builds

      public Jar[] builds() throws Exception
      Build Multiple jars. If the -sub command is set, we filter the file with the given patterns.
      Throws:
      Exception
    • startBuild

      protected void startBuild(Builder builder) throws Exception
      Called when we start to build a builder
      Throws:
      Exception
    • doneBuild

      protected void doneBuild(Builder builder) throws Exception
      Called when we're done with a builder
      Throws:
      Exception
    • getSubBuilders

      public List<Builder> getSubBuilders() throws Exception
      Answer a list of builders that represent this file or a list of files specified in -sub. This list can be empty. These builders represents to be created artifacts and are each scoped to such an artifacts. The builders can be used to build the bundles or they can be used to find out information about the to be generated bundles.
      Returns:
      List of 0..n builders representing artifacts.
      Throws:
      Exception
    • getSubBuilder

      public Builder getSubBuilder(File file) throws Exception
      Throws:
      Exception
    • getSubBuilder

      public Builder getSubBuilder() throws Exception
      Throws:
      Exception
    • _maven_version

      public String _maven_version(String[] args)
      A macro to convert a maven version to an OSGi version
    • _permissions

      public String _permissions(String[] args)
    • removeBundleSpecificHeaders

      public void removeBundleSpecificHeaders()
    • isInScope

      public boolean isInScope(Collection<File> resources) throws Exception
      Check if the given resource is in scope of this bundle. That is, it checks if the Include-Resource includes this resource or if it is a class file it is on the class path and the Export-Package or Private-Package include this resource.
      Throws:
      Exception
    • getIncludedResourcePrefixes

      private Stream<String> getIncludedResourcePrefixes()
      Extra the paths for the directories and files that are used in the Include-Resource header.
    • getClasspathEntrySuffix

      public String getClasspathEntrySuffix(File resource) throws Exception
      Answer the string of the resource that it has in the container. It is possible that the resource is a classpath entry. In that case an empty string is returned.
      Parameters:
      resource - The resource to look for
      Returns:
      A suffix on the classpath or "" if the resource is a class path entry
      Throws:
      Exception
    • doNotCopy

      public boolean doNotCopy(String v)
      doNotCopy The doNotCopy variable maintains a patter for files that should not be copied. There is a default Constants.DEFAULT_DO_NOT_COPY but this ca be overridden with the Constants.DONOTCOPY property.
    • doNotCopy

      public boolean doNotCopy(File from)
    • getDoNotCopy

      public Pattern getDoNotCopy()
    • setTypeSpecificPlugins

      protected void setTypeSpecificPlugins(Set<Object> list)
      Overrides:
      setTypeSpecificPlugins in class Analyzer
    • doDiff

      public void doDiff(Jar dot) throws Exception
      Diff this bundle to another bundle for the given packages.
      Throws:
      Exception
    • show

      private void show(Diff p, String indent, boolean warning)
      Show the diff recursively
    • addSourcepath

      public void addSourcepath(Collection<File> sourcepath)
    • doBaseline

      protected void doBaseline(Jar dot) throws Exception
      Base line against a previous version. Should be overridden in the ProjectBuilder where we have access to the repos
      Throws:
      Exception
    • _githead

      public String _githead(String[] args) throws IOException
      Throws:
      IOException
    • report

      public void report(Map<String,Object> table) throws Exception
      Create a report of the settings
      Overrides:
      report in class Analyzer
      Throws:
      Exception
    • from

      public Builder from(BuilderSpecification spec) throws IOException
      Collect the information from the BuilderSpecification
      Throws:
      IOException
    • system

      public String system(boolean allowFail, String command, String input) throws IOException, InterruptedException
      We override system so that, for the duration of a build operation, we may cache the result of a given system call. In a large build with many 'make' build jars, such as some OSGi CT build projects, we may call system hundreds of time to compute headers based upon git information such as 'git describe'. Since this information will not change during the course of a single build operation, we cache results to only call once.
      Overrides:
      system in class Processor
      Throws:
      IOException
      InterruptedException