aQute.bnd.build
Class Project

java.lang.Object
  extended by aQute.lib.osgi.Processor
      extended by aQute.bnd.build.Project
All Implemented Interfaces:
Registry, Constants, Reporter, Closeable

public class Project
extends Processor

This class is NOT threadsafe

Author:
aqute

Field Summary
static String BNDCNF
           
static String BNDFILE
           
 
Fields inherited from class aQute.lib.osgi.Processor
LIST_SPLITTER
 
Fields inherited from interface aQute.lib.osgi.Constants
BLUEPRINT_TIMEOUT_ATTRIBUTE, BLUEPRINT_WAIT_FOR_DEPENDENCIES_ATTRIBUTE, BND_ADDXMLTOTEST, BND_LASTMODIFIED, BUILDFILES, BUILDPACKAGES, BUILDPATH, BUMPPOLICY, BUNDLE_ACTIVATIONPOLICY, BUNDLE_ACTIVATOR, BUNDLE_BLUEPRINT, BUNDLE_CATEGORY, BUNDLE_CLASSPATH, BUNDLE_CONTACTADDRESS, BUNDLE_COPYRIGHT, BUNDLE_DESCRIPTION, BUNDLE_DOCURL, BUNDLE_ICON, BUNDLE_LICENSE, BUNDLE_LOCALIZATION, BUNDLE_MANIFESTVERSION, BUNDLE_NAME, BUNDLE_NATIVECODE, BUNDLE_REQUIREDEXECUTIONENVIRONMENT, BUNDLE_SPECIFIC_HEADERS, BUNDLE_SYMBOLIC_NAME_ATTRIBUTE, BUNDLE_SYMBOLICNAME, BUNDLE_UPDATELOCATION, BUNDLE_VENDOR, BUNDLE_VERSION, BUNDLE_VERSION_ATTRIBUTE, CLASSPATH, COMMAND_DIRECTIVE, COMPILER_SOURCE, COMPILER_TARGET, COMPONENT_ACTIVATE, COMPONENT_CONFIGURATION_POLICY, COMPONENT_DEACTIVATE, COMPONENT_DESCRIPTORS, COMPONENT_DESIGNATE, COMPONENT_DESIGNATEFACTORY, COMPONENT_DYNAMIC, COMPONENT_ENABLED, COMPONENT_FACTORY, COMPONENT_IMMEDIATE, COMPONENT_IMPLEMENTATION, COMPONENT_MODIFIED, COMPONENT_MULTIPLE, COMPONENT_NAME, COMPONENT_OPTIONAL, COMPONENT_PROPERTIES, COMPONENT_PROVIDE, COMPONENT_SERVICEFACTORY, COMPONENT_VERSION, componentDirectives, CONDITIONAL_PACKAGE, CONDUIT, CONSUMER_POLICY, CREATED_BY, CURRENT_PACKAGE, CURRENT_USES, CURRENT_VERSION, DEBUG, DEFAULT_BAR_EXTENSION, DEFAULT_BND_EXTENSION, DEFAULT_BNDRUN_EXTENSION, DEFAULT_CHARSET, DEFAULT_DO_NOT_COPY, DEFAULT_JAR_EXTENSION, DEFAULT_LAUNCHER_BSN, DEFAULT_TESTER_BSN, DEPENDSON, DEPLOY, DEPLOYREPO, DESCRIPTION_ATTRIBUTE, directives, DONOTCOPY, DUPLICATE_MARKER, DYNAMICIMPORT_PACKAGE, EMBEDDED_REPO, EMPTY, EMPTY_HEADER, EXCLUDE_DIRECTIVE, EXPORT_CONTENTS, EXPORT_PACKAGE, EXPORT_SERVICE, EXTENSION_DIRECTIVE, FAIL_OK, FRAGMENT_ATTACHMENT_DIRECTIVE, FRAGMENT_HOST, FROM_DIRECTIVE, headers, IGNORE_PACKAGE, IMPORT_DIRECTIVE, IMPORT_PACKAGE, IMPORT_PRIVATE, IMPORT_REFERENCE, IMPORT_SERVICE, importDirectives, INCLUDE, INCLUDE_DIRECTIVE, INCLUDE_RESOURCE, INCLUDERESOURCE, JIDENTIFIER, KEYSTORE_LOCATION_DIRECTIVE, KEYSTORE_PASSWORD_DIRECTIVE, KEYSTORE_PROVIDER_DIRECTIVE, LANGUAGE_ATTRIBUTE, LAUNCHER_PLUGIN, LIB_DIRECTIVE, LINK_ATTRIBUTE, MAKE, MANDATORY_DIRECTIVE, MANIFEST, METAPACKAGES, METATYPE, NAME_ATTRIBUTE, NAMESECTION, NAMESPACE_STEM, NO_IMPORT_DIRECTIVE, NOANNOTATIONS, NOBUNDLES, NODEFAULTVERSION, NOEXTRAHEADERS, NOMANIFEST, NONE, NOPE, NOUSES, options, OSNAME_ATTRIBUTE, OSVERSION_ATTRIBUTE, PATH_DIRECTIVE, PEDANTIC, PLUGIN, POM, PRESENCE_DIRECTIVE, PRIVATE_DIRECTIVE, PRIVATE_PACKAGE, PROCESSOR_ATTRIBUTE, PROVIDE_DIRECTIVE, PROVIDER_POLICY, RELEASEREPO, REMOVE_ATTRIBUTE_DIRECTIVE, REMOVEHEADERS, REPORTNEWER, REQUIRE_BND, REQUIRE_BUNDLE, RESOLUTION_DIRECTIVE, RESOURCEONLY, RUNBUILDS, RUNBUNDLES, RUNFRAMEWORK, RUNFRAMEWORK_NONE, RUNFRAMEWORK_SERVICES, RUNPATH, RUNPATH_LAUNCHER_DIRECTIVE, RUNPATH_MAIN_DIRECTIVE, RUNPROPERTIES, RUNSTORAGE, RUNSYSTEMPACKAGES, RUNTIMEOUT, RUNTRACE, RUNVM, SAVEMANIFEST, SELECTION_FILTER_ATTRIBUTE, SERVICE_COMPONENT, SET_COMPONENT_DIRECTIVES, SET_COMPONENT_DIRECTIVES_1_1, SIGN, SIGN_PASSWORD_DIRECTIVE, SIGNATURE_TEST, SINGLETON_DIRECTIVE, SIZE_ATTRIBUTE, SNAPSHOT, SOURCEPATH, SOURCES, SPECIFICATION_VERSION, SPLIT_PACKAGE_DIRECTIVE, SUB, TESTCASES, TESTCONTINUOUS, TESTER_PLUGIN, TESTPACKAGES, TESTPATH, TESTREPORT, TOOL, UNDERTEST, USES_DIRECTIVE, USES_USES, VALID_PROPERTY_TYPES, VERBOSE, VERSION_ATTRIBUTE, VERSION_FILTER, VERSIONPOLICY, VERSIONPOLICY_IMPL, VERSIONPOLICY_USES, VISIBILITY_DIRECTIVE, WAB, WABLIB
 
Constructor Summary
Project(Workspace workspace, File buildDir)
           
Project(Workspace workspace, File projectDir, File buildFile)
           
 
Method Summary
 String _findfile(String[] args)
           
 String _help(String[] args)
           
 String _p_allsourcepath(String[] args)
           
 String _p_bootclasspath(String[] args)
           
 String _p_buildpath(String[] args)
           
 String _p_dependson(String[] args)
           
 String _p_output(String[] args)
           
 String _p_sourcepath(String[] args)
           
 String _p_testpath(String[] args)
           
 String _project(String[] args)
           
 String _repo(String[] args)
          Macro access to the repository ${repo;[;[;]]}
 String _repos(String[] args)
           
 void action(String command)
           
 void appendPackages(RepositoryPlugin.Strategy strategyx, String spec, List<Container> resolvedBundles, ResolverMode mode)
          Calculates the containers required to fulfil the -buildpackages instruction, and appends them to the existing list of containers.
 File[] build()
           
 File[] build(boolean underTest)
          This is the external method that will pre-build any dependencies if it is out of date.
 File[] buildLocal(boolean underTest)
          Build without doing any dependency checking.
 void bump()
           
 void bump(String mask)
           
 void clean()
           
 void deploy()
          Deploy the current project to a repository
 void deploy(File file)
          Deploy the file (which must be a bundle) into the repository.
 void deploy(String name, File file)
          Deploy the file (which must be a bundle) into the repository.
 void doMavenPom(RepositoryPlugin.Strategy strategyx, List<Container> result, String action)
          The user selected pom in a path.
 void fillActions(Map<String,Action> all)
           
 Map<String,Action> getActions()
           
 Collection<File> getAllsourcepath()
           
 Collection<Container> getBootclasspath()
           
 ProjectBuilder getBuilder(ProjectBuilder parent)
          Return a new builder that is nicely setup for this project.
 File[] getBuildFiles()
          This method must only be called when it is sure that the project has been build before in the same session.
 File[] getBuildFiles(boolean buildIfAbsent)
           
 Collection<Container> getBuildpath()
           
 Container getBundle(String bsn, String range, RepositoryPlugin.Strategy strategy, Map<String,String> attrs)
          Get a bundle from one of the plugin repositories.
 List<Container> getBundles(RepositoryPlugin.Strategy strategyx, String spec, String source)
          Analyze the header and return a list of files that should be on the build, test or some other path.
 int getChanged()
           
 Container getDeliverable(String bsn, Map<String,String> attrs)
          Answer the container associated with a given bsn.
 Collection<Container> getDeliverables()
          Returns containers for the deliverables of this project.
 Collection<Project> getDependson()
           
 File[] getFiles()
          Return the files
protected  Object[] getMacroDomains()
          This should be overridden by subclasses to add extra macro command domains on the search list.
 String getName()
           
 File getOutput()
           
 File getOutputFile(String bsn)
           
 Container getPackage(String packageName, String range, RepositoryPlugin.Strategy strategyx, Map<String,String> attrs, ResolverMode mode)
          Find a container to fulfil a package requirement
 ProjectLauncher getProjectLauncher()
          Get a launcher.
 ProjectTester getProjectTester()
           
 boolean getRunBuilds()
           
 Collection<Container> getRunbundles()
           
 Collection<Container> getRunpath()
           
 Map<String,String> getRunProperties()
           
 File getRunStorage()
           
 Collection<String> getRunVM()
           
 Collection<File> getSourcePath()
           
 File getSrc()
           
 Builder getSubBuilder(File bndFile)
          Return the builder associated with the give bnd file or null.
 Collection<? extends Builder> getSubBuilders()
          Get a list of the sub builders.
 File getTarget()
           
 Collection<Container> getTestpath()
           
static Project getUnparented(File propertiesFile)
           
 Jar getValidJar(File f)
          This methods attempts to turn any jar into a valid jar.
 Jar getValidJar(Jar jar, String id)
           
 Jar getValidJar(URL url)
           
 Workspace getWorkspace()
           
 boolean isCnf()
           
 boolean isNoBundles()
          Answer if this project does not have any output
 boolean isStale()
          Check if this project needs building.
 boolean isValid()
           
 boolean lock(String reason)
           
protected  RepositoryPlugin.Strategy overrideStrategy(Map<String,String> attrs, RepositoryPlugin.Strategy useStrategy)
           
 void prepare()
          Set up all the paths
 void propertiesChanged()
           
 boolean refresh()
          Refresh if we are based on stale data.
 void refreshAll()
           
 void release()
           
 void release(boolean test)
           
 File release(Jar jar)
           
 void release(String name)
          Release.
 void release(String name, boolean test)
          Release
 File release(String name, Jar jar)
          Release
 void run()
           
 File saveBuild(Jar jar)
           
 void script(String type, String script)
           
 void setChanged()
           
 void setDelayRunDependencies(boolean x)
          Make this project delay the calculation of the run dependencies.
 void test()
           
protected  Container toContainer(String bsn, String range, Map<String,String> attrs, File result)
           
 String toString()
           
 void unlock()
           
 
Methods inherited from class aQute.lib.osgi.Processor
_basedir, _random, addBasicPlugin, addClose, addIncluded, addProperties, append, appendPath, begin, beginHandleErrors, clear, close, customize, doAttrbutes, doIncludeFile, endHandleErrors, error, error, exists, forceRefresh, formatArrays, getBase, getClass, getDuration, getErrors, getExecutor, getFile, getFile, getFlattenedProperties, getInfo, getInfo, getManifestAsProperties, getParent, getPlugin, getPlugins, getPlugins, getProperties, getPropertiesFile, getProperty, getProperty, getReplacer, getTop, getWarnings, isDuplicate, isExceptions, isFailOk, isMissingPlugin, isOk, isPedantic, isPerfect, isTrace, isTrue, join, join, join, join, join, lastModified, loadPlugins, loadProperties, makePrintable, merge, merge, mergeProperties, mergeProperties, newHashMap, newList, newList, newMap, newMap, newSet, newSet, normalize, normalize, parseHeader, parseHeader, printClause, printClauses, printClauses, progress, read, removeBasicPlugin, removeDuplicateMarker, replaceAll, setBase, setExceptions, setFileMustExist, setForceLocal, setParent, setPedantic, setProperties, setProperties, setProperties, setProperty, setTrace, setTypeSpecificPlugins, signal, split, split, split, trace, unsetProperty, updateModified, warning
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 

Field Detail

BNDFILE

public static final String BNDFILE
See Also:
Constant Field Values

BNDCNF

public static final String BNDCNF
See Also:
Constant Field Values
Constructor Detail

Project

public Project(Workspace workspace,
               File projectDir,
               File buildFile)
        throws Exception
Throws:
Exception

Project

public Project(Workspace workspace,
               File buildDir)
        throws Exception
Throws:
Exception
Method Detail

getUnparented

public static Project getUnparented(File propertiesFile)
                             throws Exception
Throws:
Exception

isValid

public boolean isValid()

getBuilder

public ProjectBuilder getBuilder(ProjectBuilder parent)
                          throws Exception
Return a new builder that is nicely setup for this project. Please close this builder after use.

Parameters:
parent - The project builder to use as parent, use this project if null
Returns:
Throws:
Exception

getChanged

public int getChanged()

setChanged

public void setChanged()

getWorkspace

public Workspace getWorkspace()

toString

public String toString()
Overrides:
toString in class Object

prepare

public void prepare()
             throws Exception
Set up all the paths

Throws:
Exception

getSrc

public File getSrc()

getBundles

public List<Container> getBundles(RepositoryPlugin.Strategy strategyx,
                                  String spec,
                                  String source)
                           throws Exception
Analyze the header and return a list of files that should be on the build, test or some other path. The list is assumed to be a list of bsns with a version specification. The special case of version=project indicates there is a project in the same workspace. The path to the output directory is calculated. The default directory ${bin} can be overridden with the output attribute.

Parameters:
strategy - STRATEGY_LOWEST or STRATEGY_HIGHEST
spec - The header
Returns:
Throws:
Exception

appendPackages

public void appendPackages(RepositoryPlugin.Strategy strategyx,
                           String spec,
                           List<Container> resolvedBundles,
                           ResolverMode mode)
                    throws Exception
Calculates the containers required to fulfil the -buildpackages instruction, and appends them to the existing list of containers.

Parameters:
strategyx - The package-version disambiguation strategy.
spec - The value of the @{code -buildpackages} instruction.
Throws:
Exception

getPackage

public Container getPackage(String packageName,
                            String range,
                            RepositoryPlugin.Strategy strategyx,
                            Map<String,String> attrs,
                            ResolverMode mode)
                     throws Exception
Find a container to fulfil a package requirement

Parameters:
packageName - The package required
range - The package version range required
strategyx - The package-version disambiguation strategy
attrs - Other attributes specified by the search.
Returns:
Throws:
Exception

doMavenPom

public void doMavenPom(RepositoryPlugin.Strategy strategyx,
                       List<Container> result,
                       String action)
                throws Exception
The user selected pom in a path. This will place the pom as well as its dependencies on the list

Parameters:
strategyx - the strategy to use.
result - The list of result containers
attrs - The attributes
Throws:
Exception - anything goes wrong

getDependson

public Collection<Project> getDependson()
                                 throws Exception
Throws:
Exception

getBuildpath

public Collection<Container> getBuildpath()
                                   throws Exception
Throws:
Exception

getTestpath

public Collection<Container> getTestpath()
                                  throws Exception
Throws:
Exception

getRunpath

public Collection<Container> getRunpath()
                                 throws Exception
Throws:
Exception

getRunbundles

public Collection<Container> getRunbundles()
                                    throws Exception
Throws:
Exception

getRunStorage

public File getRunStorage()
                   throws Exception
Throws:
Exception

getRunBuilds

public boolean getRunBuilds()

getSourcePath

public Collection<File> getSourcePath()
                               throws Exception
Throws:
Exception

getAllsourcepath

public Collection<File> getAllsourcepath()
                                  throws Exception
Throws:
Exception

getBootclasspath

public Collection<Container> getBootclasspath()
                                       throws Exception
Throws:
Exception

getOutput

public File getOutput()
               throws Exception
Throws:
Exception

_p_dependson

public String _p_dependson(String[] args)
                    throws Exception
Throws:
Exception

_p_buildpath

public String _p_buildpath(String[] args)
                    throws Exception
Throws:
Exception

_p_testpath

public String _p_testpath(String[] args)
                   throws Exception
Throws:
Exception

_p_sourcepath

public String _p_sourcepath(String[] args)
                     throws Exception
Throws:
Exception

_p_allsourcepath

public String _p_allsourcepath(String[] args)
                        throws Exception
Throws:
Exception

_p_bootclasspath

public String _p_bootclasspath(String[] args)
                        throws Exception
Throws:
Exception

_p_output

public String _p_output(String[] args)
                 throws Exception
Throws:
Exception

getMacroDomains

protected Object[] getMacroDomains()
Description copied from class: Processor
This should be overridden by subclasses to add extra macro command domains on the search list.

Overrides:
getMacroDomains in class Processor
Returns:

release

public File release(Jar jar)
             throws Exception
Throws:
Exception

release

public File release(String name,
                    Jar jar)
             throws Exception
Release

Parameters:
name - The repository name
jar -
Returns:
Throws:
Exception

release

public void release(boolean test)
             throws Exception
Throws:
Exception

release

public void release(String name,
                    boolean test)
             throws Exception
Release

Parameters:
name - The respository name
test - Run testcases
Throws:
Exception

getBundle

public Container getBundle(String bsn,
                           String range,
                           RepositoryPlugin.Strategy strategy,
                           Map<String,String> attrs)
                    throws Exception
Get a bundle from one of the plugin repositories. If an exact version is required we just return the first repository found (in declaration order in the build.bnd file).

Parameters:
bsn - The bundle symbolic name
range - The version range
lowest - set to LOWEST or HIGHEST
Returns:
the file object that points to the bundle or null if not found
Throws:
Exception - when something goes wrong

overrideStrategy

protected RepositoryPlugin.Strategy overrideStrategy(Map<String,String> attrs,
                                                     RepositoryPlugin.Strategy useStrategy)
Parameters:
attrs -
useStrategy -
Returns:

toContainer

protected Container toContainer(String bsn,
                                String range,
                                Map<String,String> attrs,
                                File result)
Parameters:
bsn -
range -
attrs -
result -
Returns:

deploy

public void deploy(String name,
                   File file)
            throws Exception
Deploy the file (which must be a bundle) into the repository.

Parameters:
name - The repository name
file - bundle
Throws:
Exception

deploy

public void deploy(File file)
            throws Exception
Deploy the file (which must be a bundle) into the repository.

Parameters:
file - bundle
Throws:
Exception

deploy

public void deploy()
            throws Exception
Deploy the current project to a repository

Throws:
Exception

_repo

public String _repo(String[] args)
             throws Exception
Macro access to the repository ${repo;[;[;]]}

Throws:
Exception

getTarget

public File getTarget()
               throws Exception
Throws:
Exception

build

public File[] build(boolean underTest)
             throws Exception
This is the external method that will pre-build any dependencies if it is out of date.

Parameters:
underTest -
Returns:
Throws:
Exception

getFiles

public File[] getFiles()
Return the files


isStale

public boolean isStale()
                throws Exception
Check if this project needs building. This is defined as:

Throws:
Exception

getBuildFiles

public File[] getBuildFiles()
                     throws Exception
This method must only be called when it is sure that the project has been build before in the same session. It is a bit yucky, but ant creates different class spaces which makes it hard to detect we already build it. This method remembers the files in the appropriate instance vars.

Returns:
Throws:
Exception

getBuildFiles

public File[] getBuildFiles(boolean buildIfAbsent)
                     throws Exception
Throws:
Exception

buildLocal

public File[] buildLocal(boolean underTest)
                  throws Exception
Build without doing any dependency checking. Make sure any dependent projects are built first.

Parameters:
underTest -
Returns:
Throws:
Exception

isNoBundles

public boolean isNoBundles()
Answer if this project does not have any output

Returns:

saveBuild

public File saveBuild(Jar jar)
               throws Exception
Throws:
Exception

getOutputFile

public File getOutputFile(String bsn)
                   throws Exception
Throws:
Exception

refresh

public boolean refresh()
Refresh if we are based on stale data. This also implies our workspace.

Overrides:
refresh in class Processor

isCnf

public boolean isCnf()

propertiesChanged

public void propertiesChanged()
Overrides:
propertiesChanged in class Processor

getName

public String getName()

getActions

public Map<String,Action> getActions()

fillActions

public void fillActions(Map<String,Action> all)

release

public void release()
             throws Exception
Throws:
Exception

release

public void release(String name)
             throws Exception
Release.

Parameters:
name - The repository name
Throws:
Exception

clean

public void clean()
           throws Exception
Throws:
Exception

build

public File[] build()
             throws Exception
Throws:
Exception

run

public void run()
         throws Exception
Throws:
Exception

test

public void test()
          throws Exception
Throws:
Exception

getValidJar

public Jar getValidJar(File f)
                throws Exception
This methods attempts to turn any jar into a valid jar. If this is a bundle with manifest, a manifest is added based on defaults. If it is a bundle, but not r4, we try to add the r4 headers.

Parameters:
descriptor -
in -
Returns:
Throws:
Exception

getValidJar

public Jar getValidJar(URL url)
                throws Exception
Throws:
Exception

getValidJar

public Jar getValidJar(Jar jar,
                       String id)
                throws Exception
Throws:
Exception

_project

public String _project(String[] args)

bump

public void bump(String mask)
          throws IOException
Throws:
IOException

bump

public void bump()
          throws IOException
Throws:
IOException

action

public void action(String command)
            throws Throwable
Throws:
Throwable

_findfile

public String _findfile(String[] args)

refreshAll

public void refreshAll()

script

public void script(String type,
                   String script)
            throws Exception
Throws:
Exception

_repos

public String _repos(String[] args)
              throws Exception
Throws:
Exception

_help

public String _help(String[] args)
             throws Exception
Throws:
Exception

getDeliverables

public Collection<Container> getDeliverables()
                                      throws Exception
Returns containers for the deliverables of this project. The deliverables is the project builder for this project if no -sub is specified. Otherwise it contains all the sub bnd files.

Returns:
A collection of containers
Throws:
Exception

getSubBuilder

public Builder getSubBuilder(File bndFile)
                      throws Exception
Return the builder associated with the give bnd file or null. The bnd.bnd file can contain -sub option. This option allows specifying files in the same directory that should drive the generation of multiple deliverables. This method figures out if the bndFile is actually one of the bnd files of a deliverable.

Parameters:
bndFile - A file pointing to a bnd file.
Returns:
null or the builder for a sub file.
Throws:
Exception

getDeliverable

public Container getDeliverable(String bsn,
                                Map<String,String> attrs)
                         throws Exception
Answer the container associated with a given bsn.

Parameters:
bndFile - A file pointing to a bnd file.
Returns:
null or the builder for a sub file.
Throws:
Exception

getSubBuilders

public Collection<? extends Builder> getSubBuilders()
                                             throws Exception
Get a list of the sub builders. A bnd.bnd file can contain the -sub option. This will generate multiple deliverables. This method returns the builders for each sub file. If no -sub option is present, the list will contain a builder for the bnd.bnd file.

Returns:
A list of builders.
Throws:
Exception

getRunVM

public Collection<String> getRunVM()

getRunProperties

public Map<String,String> getRunProperties()

getProjectLauncher

public ProjectLauncher getProjectLauncher()
                                   throws Exception
Get a launcher.

Returns:
Throws:
Exception

getProjectTester

public ProjectTester getProjectTester()
                               throws Exception
Throws:
Exception

lock

public boolean lock(String reason)
             throws InterruptedException
Throws:
InterruptedException

unlock

public void unlock()

setDelayRunDependencies

public void setDelayRunDependencies(boolean x)
Make this project delay the calculation of the run dependencies. The run dependencies calculation can be done in prepare or until the dependencies are actually needed.



Copyright © 2012 aQute SARL. All Rights Reserved.