info: java: upgrade workspace
authorFerry Huberts <ferry.huberts@pelagic.nl>
Mon, 18 Mar 2019 15:10:30 +0000 (16:10 +0100)
committerFerry Huberts <ferry.huberts@pelagic.nl>
Mon, 18 Mar 2019 15:13:29 +0000 (16:13 +0100)
Signed-off-by: Ferry Huberts <ferry.huberts@pelagic.nl>
19 files changed:
lib/info.java/cnf/build.bnd
lib/info.java/cnf/buildrepo/hamcrest-core/hamcrest-core-1.3.0.jar [deleted file]
lib/info.java/cnf/buildrepo/org.hamcrest/org.hamcrest-2.1.0.jar [new file with mode: 0644]
lib/info.java/cnf/ext/junit.bnd
lib/info.java/cnf/ext/maven-build.mvn
lib/info.java/cnf/ext/maven-workspace.mvn
lib/info.java/cnf/gradle/dependencies/biz.aQute.bnd.gradle/biz.aQute.bnd.gradle-3.4.0.jar [deleted file]
lib/info.java/cnf/gradle/dependencies/biz.aQute.bnd.gradle/biz.aQute.bnd.gradle-4.1.0.jar [new file with mode: 0644]
lib/info.java/cnf/gradle/dependencies/org.osgi.impl.bundle.bindex/org.osgi.impl.bundle.bindex-3.0.0.jar [deleted file]
lib/info.java/cnf/gradle/dependencies/org.osgi.impl.bundle.repoindex.cli/org.osgi.impl.bundle.repoindex.cli-3.4.0.jar [deleted file]
lib/info.java/cnf/gradle/doc/BUILDING-GRADLE.md
lib/info.java/cnf/gradle/doc/Bndtools Plugins by Pelagic - Screenshot.png [deleted file]
lib/info.java/cnf/gradle/doc/CHANGELOG.md
lib/info.java/cnf/gradle/doc/template.dot
lib/info.java/cnf/gradle/doc/template.svg
lib/info.java/cnf/gradle/template/index.gradle [deleted file]
lib/info.java/cnf/gradle/template/jacoco.gradle
lib/info.java/cnf/gradle/template/master.gradle
lib/info.java/gradle.properties

index a33b6b9..885d4e5 100644 (file)
@@ -62,6 +62,10 @@ Git-Descriptor:          ${system-allow-fail;git describe --dirty --always}
 Git-SHA:                 ${system-allow-fail;git rev-list -1 HEAD}
 
 
+# Do a reproducible build, see
+# https://reproducible-builds.org/docs/definition/
+-reproducible: true
+
 # To enable baselining, uncomment the following lines:
 -baseline:               *
 -diffignore:             Git-Descriptor,Git-SHA
diff --git a/lib/info.java/cnf/buildrepo/hamcrest-core/hamcrest-core-1.3.0.jar b/lib/info.java/cnf/buildrepo/hamcrest-core/hamcrest-core-1.3.0.jar
deleted file mode 100644 (file)
index 9d5fe16..0000000
Binary files a/lib/info.java/cnf/buildrepo/hamcrest-core/hamcrest-core-1.3.0.jar and /dev/null differ
diff --git a/lib/info.java/cnf/buildrepo/org.hamcrest/org.hamcrest-2.1.0.jar b/lib/info.java/cnf/buildrepo/org.hamcrest/org.hamcrest-2.1.0.jar
new file mode 100644 (file)
index 0000000..e323d5e
Binary files /dev/null and b/lib/info.java/cnf/buildrepo/org.hamcrest/org.hamcrest-2.1.0.jar differ
index 53ae88c..5b648f6 100644 (file)
@@ -1,6 +1,6 @@
 junit: \
   junit;version=latest, \
-  hamcrest-core;version=latest
+  org.hamcrest;version=latest
 
 test-reports: \
   test-results
index 113c134..6ea7da7 100644 (file)
@@ -3,7 +3,7 @@
 #
 
 junit:junit:4.12
-org.hamcrest:hamcrest-core:1.3
+org.hamcrest:hamcrest:2.1
 org.osgi:osgi.annotation:6.0.1
 org.osgi:osgi.cmpn:6.0.0
 org.osgi:osgi.core:6.0.0
index 30e6453..5056382 100644 (file)
@@ -2,5 +2,4 @@
 # For the workspace
 #
 
-biz.aQute.bnd:biz.aQute.bnd.gradle:3.4.0
-biz.aQute.bnd:org.osgi.impl.bundle.repoindex.cli:3.4.0
+biz.aQute.bnd:biz.aQute.bnd.gradle:4.1.0
diff --git a/lib/info.java/cnf/gradle/dependencies/biz.aQute.bnd.gradle/biz.aQute.bnd.gradle-3.4.0.jar b/lib/info.java/cnf/gradle/dependencies/biz.aQute.bnd.gradle/biz.aQute.bnd.gradle-3.4.0.jar
deleted file mode 100644 (file)
index efcba81..0000000
Binary files a/lib/info.java/cnf/gradle/dependencies/biz.aQute.bnd.gradle/biz.aQute.bnd.gradle-3.4.0.jar and /dev/null differ
diff --git a/lib/info.java/cnf/gradle/dependencies/biz.aQute.bnd.gradle/biz.aQute.bnd.gradle-4.1.0.jar b/lib/info.java/cnf/gradle/dependencies/biz.aQute.bnd.gradle/biz.aQute.bnd.gradle-4.1.0.jar
new file mode 100644 (file)
index 0000000..7e255bd
Binary files /dev/null and b/lib/info.java/cnf/gradle/dependencies/biz.aQute.bnd.gradle/biz.aQute.bnd.gradle-4.1.0.jar differ
diff --git a/lib/info.java/cnf/gradle/dependencies/org.osgi.impl.bundle.bindex/org.osgi.impl.bundle.bindex-3.0.0.jar b/lib/info.java/cnf/gradle/dependencies/org.osgi.impl.bundle.bindex/org.osgi.impl.bundle.bindex-3.0.0.jar
deleted file mode 100644 (file)
index 61be2ae..0000000
Binary files a/lib/info.java/cnf/gradle/dependencies/org.osgi.impl.bundle.bindex/org.osgi.impl.bundle.bindex-3.0.0.jar and /dev/null differ
diff --git a/lib/info.java/cnf/gradle/dependencies/org.osgi.impl.bundle.repoindex.cli/org.osgi.impl.bundle.repoindex.cli-3.4.0.jar b/lib/info.java/cnf/gradle/dependencies/org.osgi.impl.bundle.repoindex.cli/org.osgi.impl.bundle.repoindex.cli-3.4.0.jar
deleted file mode 100644 (file)
index 8831afe..0000000
Binary files a/lib/info.java/cnf/gradle/dependencies/org.osgi.impl.bundle.repoindex.cli/org.osgi.impl.bundle.repoindex.cli-3.4.0.jar and /dev/null differ
index bc731fb..dcb38d2 100644 (file)
@@ -1,11 +1,8 @@
 # <a name="Introduction"/>Introduction
 
-This workspace is setup to be built with [Gradle](http://www.gradle.org) through
-the ["Bndtools Gradle Plugin by Pelagic"]
-(https://marketplace.eclipse.org/content/bndtools-plugins-pelagic) Eclipse
-plugin.
+This workspace is setup to be built with [Gradle](http://www.gradle.org).
 
-The build is setup in such a way that bnd (OSGi) projects and projects with
+The build is setup in such a way that Bnd (OSGi) projects and projects with
 specific gradle files are automatically included in the build; no editing of
 Gradle build scripts is needed.
 
@@ -15,13 +12,14 @@ A simple command in the root of the workspace is enough to build it all:
 gradle build
 ```
 
-**Note**: The official bnd Gradle plugin is used so that the same build fidelity
-is achieved.
+**Note**: The official Bnd Gradle plugin is used so that the same build
+fidelity is achieved.
 
-However, this build setup adds some extra features to the build...
+However, compared to the official Bnd Gradle plugin, this workspace build
+setup adds some extra features to the build...
 
 First off, the build setup is far more flexible and featureful than the build
-setup that is delivered by bndtools itself.
+setup that is delivered by Bndtools itself.
 
 Among other things it has the following extra features:
 
@@ -29,15 +27,20 @@ Among other things it has the following extra features:
 * Support for JUnit code coverage reports through Jacoco
 * An easily customisable setup
 * Documentation
-* Automatic location of the cnf project
+* Automatic location of the configuration (```cnf```) project
 * ...and much more
 
-In order to use this build setup in new workspace, enable the plugin in the
-'Prefrences->Bndtools->Generated Resources' pane (and disable the Gradle plugin
-that's delivered by bndtools itself, see the [screenshot]
-(Bndtools Plugins by Pelagic - Screenshot.png)).
+In order to use this workspace setup in a new workspace, add the
+URL ```https://gitlab.com/fhuberts/bndtoolsWorkspace.git``` (use
+the ```origin/master``` branch) to the ```Raw Git Clone URLs``` pane
+in the Eclipse ```Prefrences->Bndtools->Generated Resources``` window.
 
-The plugin is compatible with bndtools 2.3.0.REL and later.
+Next time you create an OSGi workspace you can choose to use this
+workspace setup. If you want to update your workspace with a new version
+of this workspace setup, then simply do the same as when creating a new
+workspace, in the existing workspace you want to update.
+
+This workspace is compatible with Bndtools 2.3.0.REL and later.
 
 
 # <a name="License"/>License
@@ -48,14 +51,14 @@ Version 1.3, 3 November 2008
 
 # <a name="OpenSource"/>Open Source
 
-The plugin was originally developed for - and delivered with - bndtools 2.3.0
-but has since been replaced with a different implemention in bndtools.
+The plugin was originally developed for - and delivered with - Bndtools 2.3.0
+but has since been replaced with a different implemention in Bndtools.
 
 The plugin was thereon forked and now lives on through the support
 of [Pelagic](http://www.pelagic.nl).
 
 The project is fully Open Source, licensed under the LGPL, and can be found
-at [GitHub](https://github.com/fhuberts/bndtoolsPlugins).
+at [GitLab](https://gitlab.com/fhuberts/bndtoolsWorkspace).
 
 Contributions are welcome!
 
@@ -81,6 +84,7 @@ Contributions are welcome!
 * [Build Tasks](#BuildTasks)
   * [Bnd Projects](#BuildTasksBndProjects)
     * [jar](#BuildTasksJar)
+    * [testOSGi](#BuildTasksTestOSGi)
     * [check](#BuildTasksCheck)
     * [checkNeeded](#BuildTasksCheckNeeded)
     * [release](#BuildTasksRelease)
@@ -89,13 +93,15 @@ Contributions are welcome!
     * [runbundles](#BuildTasksRunbundles)
     * [export.<name>](#BuildTasksExportName)
     * [export](#BuildTasksExport)
+    * [resolve.<name>](#BuildTasksResolveName)
+    * [resolve](#BuildTasksResolve)
+    * [run.<name>](#BuildTasksRunName)
+    * [testrun.<name>](#BuildTasksTestRunName)
     * [echo](#BuildTasksEcho)
     * [bndproperties](#BuildTasksBndProperties)
     * [clean](#BuildTasksClean)
     * [cleanNeeded](#BuildTasksCleanNeeded)
   * [All Projects](#BuildTasksAllProjects)
-    * [index](#BuildTasksIndex)
-      * [Settings](#BuildTasksIndexSettings)
     * [clean](#BuildTasksAllClean)
     * [cleanNeeded](#BuildTasksAllCleanNeeded)
     * [distClean](#BuildTasksDistClean)
@@ -122,8 +128,8 @@ Contributions are welcome!
   * [Gradle](#CustomisingTheBuildGradle)
   * [Bnd](#CustomisingTheBuildBnd)
 * [Adding Java Projects To The Build](#AddingJavaProjectsToTheBuild)
+* [OSGi Repository Indexing](#BuildIndexing)
 * [Jenkins Build Setup](#JenkinsBuildSetup)
-* [Replacing The Bndtools Gradle Setup](#ReplacingBndtoolsGradle)
 
 
 # <a name="InstallingGradle"/>Installing Gradle
@@ -139,14 +145,14 @@ This description assumes a Linux machine. Details may vary on other OSes.
 * Download Gradle from [http://www.gradle.org](http://www.gradle.org).
 
 * Unpack the downloaded archive and put it in ```/usr/local/lib```
-  as ```/usr/local/lib/gradle-2.0``` (assuming Gradle 2.0 was downloaded).
+  as ```/usr/local/lib/gradle-4.0``` (in case Gradle 4.0 was downloaded).
 
 * Create a symbolic link to the Gradle installation directory to be able to
   easily switch Gradle versions later on:
 
   ```
   cd /usr/local/lib
-  ln -s gradle-2.0 /usr/local/lib/gradle
+  ln -s gradle-4.0 /usr/local/lib/gradle
   ```
 
 * Put the Gradle executable ```/usr/local/lib/gradle/bin/gradle``` on
@@ -159,8 +165,8 @@ This description assumes a Linux machine. Details may vary on other OSes.
 
 ## <a name="InstallingGradleInTheWorkspace"/>In The Workspace
 
-Gradle can be installed in the workspace so that the workspace can be built on
-systems that do not have Gradle installed (like build servers).
+Gradle can be installed in the workspace so that the workspace can be built
+on systems that do not have Gradle installed (like build servers).
 
 The procedure is:
 
@@ -173,17 +179,25 @@ The procedure is:
   gradle wrapper
   ```
 
+  If you want to install a specific version of Gradle, then use the
+  following syntax (the example installs Gradle 4.0):
+
+  ```
+  gradle wrapper --gradle-version 4.0
+  ```
+
 * Commit the files that were created in the workspace to your version control
   system.
 
 
 # <a name="ConfiguringTheGradleDaemon"/>Configuring The Gradle Daemon
 
-Startup times of a Gradle build can be much improved by using the Gradle daemon.
+Startup times of a Gradle build can be much improved by using the Gradle
+daemon.
 
-The Gradle daemon works well when the Gradle build script dependencies are not
-changed, which makes it well suited to regular development (where these are not
-changed) but **not** for build servers.
+The Gradle daemon works well when the Gradle build script dependencies are
+not changed, which makes it well suited to regular development (where these
+are not changed) but **not** for build servers.
 
 The daemon can be easily setup by adding the following line
 to ```~/.gradle/gradle.properties```:
@@ -204,19 +218,19 @@ gradle --stop
 
 ## <a name="ProjectsAndWorkspacesRootProject"/>Root Project
 
-The Gradle root project is the directory that contains the ```settings.gradle```
-file.
+The Gradle root project is the directory that contains
+the ```settings.gradle``` file.
 
-Gradle locates the root project by first looking for the ```settings.gradle```
-file in the directory from which it was run, and - when not found - then by
-searching up in the directory tree.
+Gradle locates the root project by first looking for
+the ```settings.gradle``` file in the directory from which it was run,
+and - when not found - then by searching up in the directory tree.
 
 
 ## <a name="ProjectsAndWorkspacesSubProjects"/>Sub-Projects
 
 The build will include all projects in the build that are:
 
-* **bnd** projects: Directories directly below the root project with
+* **Bnd** projects: Directories directly below the root project with
                     a ```bnd.bnd``` file.
 
 * **Gradle** projects: Directories directly below the root project with
@@ -226,17 +240,17 @@ The build will include all projects in the build that are:
 
 ## <a name="ProjectsAndWorkspacesGradleWorkspace"/>Gradle Workspace
 
-The Gradle workspace is rooted in the root project and consists of all included
-projects - **bnd** *and* **Gradle** projects.
+The Gradle workspace is rooted in the root project and consists of all
+included projects - **Bnd** *and* **Gradle** projects.
 
 
 ## <a name="ProjectsAndWorkspacesBndWorkspace"/>Bnd Workspace
 
-The bnd workspace is rooted in the root project and contains exactly one
-configuration project, and zero or more **bnd** projects.
+The Bnd workspace is rooted in the root project and contains exactly one
+configuration project, and zero or more **Bnd** projects.
 
-For it to be a *useful* bnd workspace, it will have to contain at least one bnd
-project.
+For it to be a *useful* Bnd workspace, it will have to contain at least one
+Bnd project.
 
 
 ## <a name="ProjectsAndWorkspacesCnf"/>Configuration Project
@@ -246,51 +260,50 @@ file, and is - by default - the ```cnf``` directory.
 
 It contains:
 
-* Placeholder source and classes directories (```src``` and ```bin```
-  respectively).
+* Placeholder source directory (```src```).
 
 * Bnd workspace configuration.
 
   * &nbsp;```ext/*.bnd```
 
-    The ```ext``` directory contains bnd settings files that are loaded
+    The ```ext``` directory contains Bnd settings files that are loaded
     **before** the ```build.bnd``` file.
 
     The directory typically contains:
 
     * &nbsp;```junit.bnd```
 
-      This file defines a bnd variable for the libraries that are needed on the
-      classpath when running JUnit tests.
+      This file defines a Bnd variable for the libraries that are needed on
+      the classpath when running JUnit tests.
 
     * &nbsp;```pluginpaths.bnd```
 
-      This file instructs bnd to load a number of plugin libraries when it
-      runs. Typically it will instruct bnd to load repository plugins. However,
-      custom plugins can also be loaded by bnd by adding them to
-      the ```-pluginpath``` instruction in this file.
+      This file instructs Bnd to load a number of plugin libraries when it
+      runs. Typically it will not do anything, but its usual purpose is to
+      instruct Bnd to load repository plugins, or custom plugins, by adding
+      them to the ```-pluginpath``` instruction in this file.
 
     * &nbsp;```repositories.bnd```
 
-      This file configures the plugins that bnd loads. Typically it will
-      configure the repository plugins that are loaded. However, if any built-in
-      plugins or custom plugins are loaded then these also will have to be
-      configured here. This file also defines which repository is the release
-      repository.
+      This file configures the plugins that Bnd loads. Typically it will
+      configure the repository plugins that are loaded. However, if any
+      built-in plugins or custom plugins are loaded then these also will
+      have to be configured here. This file also defines which repository
+      is the release repository.
 
   * &nbsp;```build.bnd```
 
-    This file contains workspace-wide settings for bnd and will override
+    This file contains workspace-wide settings for Bnd and will override
     settings that are defined in any of the ```ext/*.bnd``` files.
 
 * Repositories.
 
   * &nbsp;```buildrepo```
 
-    This repository contains libraries that are intended **only for build-time**
-    usage. None are intended to be deployed as bundles into a running OSGi
-    framework, and indeed they may cause unexpected errors if they are used
-    in such a fashion.
+    This repository contains libraries that are intended
+    **only for build-time** usage. None are intended to be deployed as
+    bundles into a running OSGi framework, and indeed they may cause
+    unexpected errors if they are used in such a fashion.
 
   * &nbsp;```localrepo```
 
@@ -299,40 +312,46 @@ It contains:
 
   * &nbsp;```releaserepo```
 
-    This repository contains no libraries by default. By default, bundles end
-    up in this repository when they are released.
+    This repository contains no libraries by default. By default, bundles
+    end up in this repository when they are released from within Eclipse.
+
+  * &nbsp;```releaserepoCI```
+
+    This repository contains no libraries by default. By default, bundles
+    end up in this repository when they are released from a Gradle build
+    (When the Gradle ```-PCI``` option is used).
 
 * Cache.
 
-  The ```cache``` directory contains libraries that are downloaded by the build.
-  If the build is self-contained then this cache only contain libraries that are
-  retrieved from the workspace itself during the build.
+  The ```cache``` directory contains libraries that are downloaded by the
+  build. If the build is self-contained then this cache only contains
+  libraries that are retrieved from the workspace itself during the build.
 
 * Build files.
 
   * &nbsp;```cnf/gradle```
 
-    This directory contains all Gradle build script files that are used by the
-    Gradle build, dependencies for the build, and documentation pertaining to
-    the build.
+    This directory contains all Gradle build script files that are used by
+    the Gradle build, dependencies for the build, and documentation
+    pertaining to the build.
 
     * &nbsp;```template```
 
-      This directory contains build script files that define the build. These
-      are **not** meant to be changed.
+      This directory contains build script files that define the build.
+      These are **not** meant to be changed.
 
     * &nbsp;```custom```
 
       This directory contains build script files that are hooks into the
-      build process. They allow specification of overrides for various settings,
-      additions to the build, modifications to the build, etc.
+      build process. They allow specification of overrides for various
+      settings, additions to the build, modifications to the build, etc.
 
       These **are** meant to be changed when build customisations are needed.
 
     * &nbsp;```dependencies```
 
-      This directory contains libraries that are used by the build in the form
-      of a file repository.
+      This directory contains libraries that are used by the build in the
+      form of a file repository.
 
     * &nbsp;```doc```
 
@@ -349,7 +368,7 @@ It contains:
         because Gradle creates them by default of because the project has
         applied the Java plugin, which creates these tasks.
 
-      * The cyan block are tasks that are added or modified by the bnd plugin.
+      * The cyan block are tasks that are added or modified by the Bnd plugin.
       
       * The orange blocks are tasks that are added or modified by this build
         setup.
@@ -363,38 +382,43 @@ It contains:
         For example:
 
         The ```compileJava``` task of a project is dependent on
-        the ```assemble``` task of another project if the latter project is on
-        the build path of the former project.
+        the ```assemble``` task of another project if the latter project is
+        on the build path of the former project.
 
       * The **yellow** arrows depict flows to parent projects (dependencies
         from projects) . These are the reverse of the **red** arrows.
 
       * The **blue** arrows depict flows/dependencies that are only present
-        when the task from which the flows originate is present in the project.
+        when the task from which the flows originate is present in the
+        project.
 
       * The **green** arrows depict flows/dependencies that are disabled by
         default.
 
-      * The **magenta** arrows depict flows/dependencies that are automatically
-        scheduled to run when the tasks from which they originate are scheduled
-        to run.
+      * The **magenta** arrows depict flows/dependencies that are
+        automatically scheduled to run when the tasks from which they
+        originate are scheduled to run.
+        
+      * See the
+        [Bnd Gradle plugin README](https://github.com/bndtools/bnd/blob/master/biz.aQute.bnd.gradle/README.md)
+        for details about the Bnd supplied build tasks.
 
 
 ## <a name="ProjectsAndWorkspacesBndProjectLayout"/>Bnd Project Layout
 
-A bnd project has a well defined layout with a number of source directories and
-one output directory:
+A Bnd project has a well defined layout with a number of source directories
+and one output directory:
 
-* Main sources: located in the ```src``` directory by default. Compiled sources
-  will be placed in the ```bin``` directory. Can be overridden with
-  the ```src``` and ```bin``` bnd settings respectively.
+* Main sources: located in the ```src``` directory by default. Compiled
+  sources will be placed in the ```bin``` directory. Can be overridden with
+  the ```src``` and ```bin``` Bnd settings respectively.
 
-* Test sources: located in the ```test``` directory by default. Compiled sources
-  will be placed in the ```bin_test``` directory. Can be overridden with
-  the ```testsrc``` and ```testbin``` bnd settings respectively.
+* Test sources: located in the ```test``` directory by default. Compiled
+  sources will be placed in the ```bin_test``` directory. Can be overridden
+  with the ```testsrc``` and ```testbin``` Bnd settings respectively.
 
 * Output directory ```generated```. Built OSGi bundles will be placed here.
-  Can be overridden with the ```target-dir``` bnd setting
+  Can be overridden with the ```target-dir``` Bnd setting
 
 
 # <a name="BuildFlow"/>Build Flow
@@ -413,10 +437,11 @@ The build has the following flow:
   * All ```*.uri``` settings are considered to be build dependencies.
 
     An ```example.uri``` setting will make the build script add the file
-    indicated by the URI to the build dependencies when the file exists on the
-    local filesystem. If the file doesn't exist on the local filesystem, then
-    the build script will download the build dependency from the specified URI
-    into the ```cnf/cache``` directory and add it to the build dependencies.
+    indicated by the URI to the build dependencies when the file exists on
+    the local filesystem. If the file doesn't exist on the local filesystem,
+    then the build script will download the build dependency from the
+    specified URI into the ```cnf/cache``` directory and add it to the build
+    dependencies.
 
     **Note**: Using a ```*.uri``` setting that points to an external location
     is **not recommended** since the build will then no longer be
@@ -428,19 +453,20 @@ The build has the following flow:
   * Detect the location of the configuration project
     (see [Configuration Project](#ProjectsAndWorkspacesCnf)).
 
-  * Initialise the bnd workspace.
+  * Initialise the Bnd workspace.
 
-  * The build dependencies are determined from the build properties that were
-    loaded from the ```gradle.properties``` file
+  * The build dependencies are determined from the build properties that
+    were loaded from the ```gradle.properties``` file
     (see [the explanation of the build properties file](#BuildProperties).
 
-  * Include all **bnd** projects and all **Gradle** projects
-    (see [Sub-Projects](#ProjectsAndWorkspacesSubProjects) for an explanation).
+  * Include all **Bnd** projects and all **Gradle** projects
+    (see [Sub-Projects](#ProjectsAndWorkspacesSubProjects) for an
+    explanation).
 
-* Gradle invokes the ```build.gradle``` file from the root project. This file
-  sets up the build:
+* Gradle invokes the ```build.gradle``` file from the root project. This
+  file sets up the build:
 
-  * The bnd plugin is loaded.
+  * The Bnd plugin is loaded.
 
   * The hook ```cnf/gradle/custom/workspace-pre.gradle``` is invoked.
 
@@ -453,24 +479,22 @@ The build has the following flow:
 
     **All Projects**
 
-    This section sets up the build for all included projects (including the root
-    project) by iterating over all included projects and performing the actions
-    described below.
+    This section sets up the build for all included projects (including the
+    root project) by iterating over all included projects and performing the
+    actions described below.
 
-    * The Gradle build directory of the project is set to the bnd
+    * The Gradle build directory of the project is set to the Bnd
       default (```generated```).
 
     * The hook ```cnf/gradle/custom/allProject-pre.gradle``` is invoked.
 
     * If the project has project specific build settings in
-      a ```build-settings.gradle``` file in its project root directory then the
-      file is invoked.
+      a ```build-settings.gradle``` file in its project root directory then
+      the file is invoked.
 
       Project specific build settings allow - on a project-by-project basis -
-      overrides of the build settings, additions to the build, modifications of
-      the build, etc.
-
-    * Index tasks are added to the project.
+      overrides of the build settings, additions to the build, modifications
+      of the build, etc.
 
     * Clean tasks are added to the project.
 
@@ -479,8 +503,9 @@ The build has the following flow:
     **Sub-Projects**
 
     This section sets up the build for all included projects, (excluding the
-    root project) by iterating over all included sub-projects. In the iteration
-    a distinction is made between **bnd** projects and **Gradle** projects.
+    root project) by iterating over all included sub-projects. In the
+    iteration a distinction is made between **Bnd** projects and **Gradle**
+    projects.
 
     * The hook ```cnf/gradle/custom/subProject-pre.gradle``` is invoked.
 
@@ -493,19 +518,20 @@ The build has the following flow:
 
     * Bnd projects
 
-      * The bnd project instance is stored in the project as
+      * The Bnd project instance is stored in the project as
         the ```bndProject``` property.
 
       * The hook ```cnf/gradle/custom/bndProject-pre.gradle``` is invoked.
 
-      * The bnd plugin is applied.
+      * The Bnd plugin is applied.
 
       * The javadoc bootclasspath is adjusted to include the bootclasspath
-        of the bnd project.
+        of the Bnd project.
 
       * The hook ```cnf/gradle/custom/bndProject-post.gradle``` is invoked.
 
-    * All projects that have applied the Gradle Java plugin:
+    * All projects that have applied the Gradle Java plugin (which includes
+      Bnd projects):
 
       * The hook ```cnf/gradle/custom/javaProject-pre.gradle``` is invoked.
 
@@ -561,34 +587,42 @@ Gradle Java plugin.
 
 ### <a name="BuildTasksJar"/>jar
 
-This task instructs bnd to construct the project's OSGi bundles. The bundles
+This task instructs Bnd to construct the project's OSGi bundles. The bundles
 are placed in the project's ```generated``` directory.
 
 This is comparable to the ```jar``` task that is defined by the Java plugin,
 which instructs the Java compiler to construct a standard jar. However, a
-bnd project completely replaces that ```jar``` task.
+Bnd project completely replaces that ```jar``` task.
 
-The ```bnd.bnd``` file describes how the OSGi bundle(s) must be constructed and
-is therefore taken as input by bnd.
+The ```bnd.bnd``` file describes how the OSGi bundle(s) must be constructed
+and is therefore taken as input by Bnd.
 
 This task is automatically disabled when no bundle(s) must be contructed.
 
 
-### <a name="BuildTasksCheck"/>check
+### <a name="BuildTasksTestOSGi"/>testOSGi
 
-This task instructs bnd to run bundle (integration) tests.
+This task instructs Bnd to run bundle OSGi (integration) tests.
 
 This is comparable to the ```test``` task that is defined by the Java plugin,
 which instructs the Java runtime to run unit tests.
 
-Refer to the bnd manual/website for more details on how to setup bundle tests.
+Refer to the Bnd manual/website for more details on how to setup bundle tests.
 
 Set ```check.ignoreFailures = true``` on the project to not fail the build
-on check failures.
+on test failures.
 
 This task is automatically disabled when no bundle tests have been defined.
 
 
+### <a name="BuildTasksCheck"/>check
+
+This task instructs Bnd to run all tests.
+
+Set ```check.ignoreFailures = true``` on the project to not fail the build
+on check failures.
+
+
 ### <a name="BuildTasksCheckNeeded"/>checkNeeded
 
 This task will invoke the ```check``` task on all projects on which the
@@ -598,7 +632,7 @@ project itself.
 
 ### <a name="BuildTasksRelease"/>release
 
-This task instructs bnd to copy the constructed OSGi bundle into the release
+This task instructs Bnd to copy the constructed OSGi bundle into the release
 repository.
 
 This task is automatically disabled when no release repository is defined or
@@ -623,11 +657,11 @@ This task is only setup if the project contains a ```<name>.bndrun``` file.
 
 ### <a name="BuildTasksRunbundles"/>runbundles
 
-This task will invoke the ```runbundles.<name>``` for all ```*.bndrun``` files
-in the project.
+This task will invoke the ```runbundles.<name>``` for all ```*.bndrun```
+files in the project.
 
-This task is automatically disabled when the project contains no ```*.bndrun```
-files.
+This task is automatically disabled when the project contains
+no ```*.bndrun``` files.
 
 
 ### <a name="BuildTasksExportName"/>export.<name>
@@ -644,109 +678,80 @@ This task is only setup if the project contains a ```<name>.bndrun``` file.
 This task will export all ```*.bndrun``` files in the project to executable
 jars.
 
-This task is automatically disabled when the project contains no ```*.bndrun```
-files.
-
-
-### <a name="BuildTasksEcho"/>echo
+This task is automatically disabled when the project contains
+no ```*.bndrun``` files.
 
-This task displays some key bnd properties of the project.
 
+### <a name="BuildTasksResolveName"/>resolve.<name>
 
-### <a name="BuildTasksBndProperties"/>bndproperties
+This task will resolve the ```<name>.bndrun``` file in the project 
+and update the ```-runbundles``` instruction in the file.
 
-This task - analogous to the Gradle ```properties``` task - displays the bnd
-properties that are defined for the project.
+This task is only setup if the project contains a ```<name>.bndrun``` file.
 
-These properties are defined in the ```bnd.bnd``` file in the root of the
-project (and optionally other ```*.bnd``` files when using the ```-sub```
-instruction for sub-bundles).
 
-Properties that are defined in workspace-wide ```*.bnd``` files that are loaded
-from the configuration project (```cnf```) are also displayed as they obviously
-also apply to the project (unless overridden by the project, in which case the
-overridden values are shown).
+### <a name="BuildTasksResolve"/>resolve
 
+This task will resolves all ```*.bndrun``` files in the project and update
+their ```-runbundles``` instructions.
 
-### <a name="BuildTasksClean"/>clean
+This task is automatically disabled when the project contains
+no ```*.bndrun``` files.
 
-This task instructs bnd to clean up the project, which removes
-the output directory and the directories that hold the class files.
 
-This is in addition to the ```clean``` task that is defined by the Java plugin.
+### <a name="BuildTasksRunName"/>run.<name>
 
+This task will run the ```<name>.bndrun``` file in the project.
 
-### <a name="BuildTasksCleanNeeded"/>cleanNeeded
-
-This task will invoke the ```clean``` task on all projects on which the
-project is dependent, after which the ```clean``` task is invoked on the
-project itself.
+This task is only setup if the project contains a ```<name>.bndrun``` file.
 
 
-## <a name="BuildTasksAllProjects"/>All Projects
+### <a name="BuildTasksTestRunName"/>testrun.<name>
 
-This section discusses tasks that are added to all projects.
+This task will run the OSGi JUnit tests in the ```<name>.bndrun``` file in
+the project.
 
+This task is only setup if the project contains a ```<name>.bndrun``` file.
 
-### <a name="BuildTasksIndex"/>index
 
-This task can create one or more of the following:
-* an uncompressed and/or compressed OBR bundle repository index
-* an uncompressed and/or compressed R5 bundle repository index
+### <a name="BuildTasksEcho"/>echo
 
-These indexes are generated from one *or more* configured file trees.
+This task displays some key Bnd properties of the project.
 
-Which files are indexed is controlled by the ```indexDirectories``` property.
-Its **syntax** is:
 
-```
-<root-directory>;<name>;<name-of-fileTree-property>, ...
-```
+### <a name="BuildTasksBndProperties"/>bndproperties
 
-* &nbsp;```root-directory```: This is the root/base directory
-  from where the relative URLs in the index file are calculated, and where
-  the index file will be placed. Must be specified but doesn't need to exist.
+This task - analogous to the Gradle ```properties``` task - displays the Bnd
+properties that are defined for the project.
 
-* &nbsp;```name```: This is the name of the repository. Can be empty, in which
-  case the name (*basename*) of the ```root directory``` is used.
+These properties are defined in the ```bnd.bnd``` file in the root of the
+project (and optionally other ```*.bnd``` files when using the ```-sub```
+instruction for sub-bundles).
 
-* &nbsp;```name-of-fileTree-property```: This is the name of a project property
-  that must be an instance of a FileTree. This file tree determines which
-  files will be indexed. If not specified then all ```*.jar``` files below
-  the ```root directory``` are indexed.
+Properties that are defined in workspace-wide ```*.bnd``` files that are
+loaded from the configuration project (```cnf```) are also displayed as they
+obviously also apply to the project (unless overridden by the project, in
+which case the overridden values are shown).
 
-Multiple indexes can be generated by specifying (**syntax** as displayed above):
 
-```
-syntax,syntax,...
-```
+### <a name="BuildTasksClean"/>clean
 
-This task is automatically disabled when no index directories have been defined
-or when no OBR indexes **and** no R5 indexes are configured to be created
-(either uncompressed or compressed).
+This task instructs Bnd to clean up the project, which removes
+the output directory and the directories that hold the class files.
 
-#### <a name="BuildTasksIndexSettings"/>Settings
+This is in addition to the ```clean``` task that is defined by the Java plugin.
 
-* &nbsp;```indexDirectories```: See the explanation just above.
 
-* &nbsp;```indexOBRUncompressed```: **true** to generate an uncompressed OBR
-                                    bundle repository index.
-                                    Defaults to **false**.
+### <a name="BuildTasksCleanNeeded"/>cleanNeeded
 
-* &nbsp;```indexOBRCompressed```: **true** to generate a compressed OBR
-                                  bundle repository index.
-                                  Defaults to **false**.
+This task will invoke the ```clean``` task on all projects on which the
+project is dependent, after which the ```clean``` task is invoked on the
+project itself.
 
-* &nbsp;```indexR5Uncompressed```: **true** to generate an uncompressed R5
-                                   bundle repository index.
-                                   Defaults to **false**.
 
-* &nbsp;```indexR5Compressed```: **true** to generate a compressed R5
-                                 bundle repository index.
-                                 Defaults to **true**.
+## <a name="BuildTasksAllProjects"/>All Projects
 
-The defaults for the settings can be overridden by defining the settings in the
-project's ```build-settings.gradle``` file.
+This section discusses tasks that are added to all projects.
 
 
 ### <a name="BuildTasksAllClean"/>clean
@@ -765,8 +770,8 @@ clean task dependencies.
 
 ### <a name="BuildTasksDistClean"/>distClean
 
-This (empty by default) task is meant to perform additional cleanup compared to
-the ```clean``` task.
+This (empty by default) task is meant to perform additional cleanup compared
+to the ```clean``` task.
 
 The build adjusts this task for the root project such that it removes:
 
@@ -785,7 +790,7 @@ project itself.
 ## <a name="BuildTasksJavaProjects"/>Java Projects
 
 This section discusses tasks that are added to all Java projects (which
-includes bnd projects).
+includes Bnd projects).
 
 
 ### <a name="BuildTasksFindbugs"/>Findbugs
@@ -793,9 +798,9 @@ includes bnd projects).
 The findbugs plugin is applied to all Java projects. This plugin adds the
 tasks ```findbugsMain``` and ```findbugsTest```.
 
-These two tasks are disabled by default since running findbugs is an expensive
-operation and is not needed for most builds. Enabling these tasks is discussed
-below.
+These two tasks are disabled by default since running findbugs is an
+expensive operation and is not needed for most builds. Enabling these tasks
+is discussed below.
 
 **Note**: The reports that are generated by the findbugs tasks will only have
 line numbers when the tasks are run on a build that produces artefacts with
@@ -843,8 +848,8 @@ and ```build``` are examples of such a task.
 * &nbsp;```findbugsExcludesFile```: The file with exclude rules. Defaults
                                     to ```{rootProject.rootDir}/${rootProject.bnd_cnf}/findbugs/findbugs.exclude.xml```.
 
-The defaults for the settings can be overridden by defining the settings in the
-project's ```build-settings.gradle``` file.
+The defaults for the settings can be overridden by defining the settings in
+the project's ```build-settings.gradle``` file.
 
 
 ### <a name="BuildTasksJacoco"/>Jacoco
@@ -869,8 +874,8 @@ created.
 * &nbsp;```jacocoCsvReport```: **true** to generate CSV reports. Defaults
                                to **false**.
 
-The defaults for the settings can be overridden by defining the settings in the
-project's ```build-settings.gradle``` file.
+The defaults for the settings can be overridden by defining the settings in
+the project's ```build-settings.gradle``` file.
 
 
 ### <a name="BuildTasksJavadoc"/>javadoc
@@ -894,39 +899,41 @@ This task generates javadoc for the main source code.
                                 task is allowed to consume.
                                 Defaults to **256M**.
 
-* &nbsp;```javadocVerbose```: **true** for verbose mode: provide more detailed
-                              messages while javadoc is running. Without the
-                              verbose option, messages appear for loading the
-                              source files, generating the documentation (one
-                              message per source file), and sorting. The verbose
-                              option causes the printing of additional messages
-                              specifying the number of milliseconds to parse
-                              each java source file.
+* &nbsp;```javadocVerbose```: **true** for verbose mode: provide more
+                              detailed messages while javadoc is running.
+                              Without the verbose option, messages appear for
+                              loading the source files, generating the
+                              documentation (one message per source file),
+                              and sorting. The verbose option causes the
+                              printing of additional messages specifying the
+                              number of milliseconds to parse each java
+                              source file.
                               Defaults to **false**.
 
 * &nbsp;```javadocDocTitle```: The title to be placed near the top of the
                                overview summary file. The title will be placed
-                               as a centered, level-one heading directly beneath
-                               the upper navigation bar. The title may contain
-                               html tags and white space, though if it does, it
-                               must be enclosed in quotes. Any internal
-                               quotation marks within title may have to be
-                               escaped.
+                               as a centered, level-one heading directly
+                               beneath the upper navigation bar. The title may
+                               contain html tags and white space, though if it
+                               does, it must be enclosed in quotes. Any
+                               internal quotation marks within title may have
+                               to be escaped.
                                Defaults to **${project.name}**.
 
 * &nbsp;```javadocWindowTitle```:  The title to be placed in the
                                    HTML ```<title>``` tag. This appears in the
                                    window title and in any browser bookmarks
                                    (favorite places) that someone creates for
-                                   this page. This title should not contain any
-                                   HTML tags, as the browser will not properly
-                                   interpret them. Any internal quotation marks
-                                   within title may have to be escaped.
+                                   this page. This title should not contain
+                                   any HTML tags, as the browser will not
+                                   properly interpret them. Any internal
+                                   quotation marks within title may have to
+                                   be escaped.
                                    Defaults to **${project.name}**.
 
 * &nbsp;```javadocClassPathBoot```: The bootclasspath.
                                     Defaults to an empty list of files.
-                                    Is automatically set for bnd projects.
+                                    Is automatically set for Bnd projects.
 
 * &nbsp;```javadocMemberLevel```: The minimum member level to include in the
                                   generated documention. Can be (from lowest
@@ -942,23 +949,24 @@ This task generates javadoc for the main source code.
                              Defaults to **true**.
 
 * &nbsp;```javadocBreakIterator```: **true** to use the internationalized
-                                    sentence boundary of java.text.BreakIterator
-                                    to determine the end of the first sentence
-                                    for English (all other locales already use
+                                    sentence boundary of
+                                    java.text.BreakIterator to determine the
+                                    end of the first sentence for English
+                                    (all other locales already use
                                     BreakIterator), rather than an English
                                     language, locale-specific algorithm. By
                                     first sentence, the first sentence in the
                                     main description of a package, class or
-                                    member is meant. This sentence is copied to
-                                    the package, class or member summary, and to
-                                    the alphabetic index.
+                                    member is meant. This sentence is copied
+                                    to the package, class or member summary,
+                                    and to the alphabetic index.
                                     Defaults to **true**.
 
 * &nbsp;```javadocDocFilesSubDirs```: **true** to enable deep copying
                                       of "doc-files" directories. In other
-                                      words, subdirectories and all contents are
-                                      recursively copied to the destination. For
-                                      example, the
+                                      words, subdirectories and all contents
+                                      are recursively copied to the
+                                      destination. For example, the
                                       directory ```doc-files/example/images```
                                       and all its contents would now be copied.
                                       Defaults to **true**.
@@ -968,8 +976,8 @@ This task generates javadoc for the main source code.
                                 generating only declarations. This option
                                 enables re-using source files originally
                                 intended for a different purpose, to produce
-                                skeleton HTML documentation at the early stages
-                                of a new project.
+                                skeleton HTML documentation at the early
+                                stages of a new project.
                                 Defaults to **false**.
 
 * &nbsp;```javadocNoDeprecated```: **true** to prevent the generation of any
@@ -978,20 +986,20 @@ This task generates javadoc for the main source code.
                                    does, plus it does not generate any
                                    deprecated API throughout the rest of the
                                    documentation. This is useful when writing
-                                   code and you don't want to be distracted by
-                                   the deprecated code.
+                                   code and you don't want to be distracted
+                                   by the deprecated code.
                                    Defaults to **false**.
 
-* &nbsp;```javadocNoDeprecatedList```: **true** to prevent the generation of the
-                                       file containing the list of deprecated
-                                       APIs (deprecated-list.html) and the link
-                                       in the navigation bar to that page.
-                                       (However, javadoc continues to generate
-                                       the deprecated API throughout the rest of
-                                       the document.) This is useful if your
-                                       source code contains no deprecated API,
-                                       and you want to make the navigation bar
-                                       cleaner.
+* &nbsp;```javadocNoDeprecatedList```: **true** to prevent the generation of
+                                       the file containing the list of
+                                       deprecated APIs (deprecated-list.html)
+                                       and the link in the navigation bar to
+                                       that page. (However, javadoc continues
+                                       to generate the deprecated API
+                                       throughout the rest of the document.)
+                                       This is useful if your source code
+                                       contains no deprecated API, and you
+                                       want to make the navigation bar cleaner.
                                        Defaults to **false**.
 
 * &nbsp;```javadocNoHelp```: **true** to omit the HELP link in the navigation
@@ -1006,10 +1014,10 @@ This task generates javadoc for the main source code.
                                navigation bar, header and footer, otherwise
                                found at the top and bottom of the generated
                                pages. Has no effect on the "bottom" option.
-                               The option is useful when you are interested only
-                               in the content and have no need for navigation,
-                               such as converting the files to PostScript or PDF
-                               for print only.
+                               The option is useful when you are interested
+                               only in the content and have no need for
+                               navigation, such as converting the files to
+                               PostScript or PDF for print only.
                                Defaults to **false**.
 
 * &nbsp;```javadocNoSince```: **true** to omit from the generated documentation
@@ -1017,51 +1025,52 @@ This task generates javadoc for the main source code.
                               tags.
                               Defaults to **false**.
 
-* &nbsp;```javadocNoTimestamp```: **true** to suppress the timestamp, which is
-                                  hidden in an HTML comment in the generated
+* &nbsp;```javadocNoTimestamp```: **true** to suppress the timestamp, which
+                                  is hidden in an HTML comment in the generated
                                   HTML near the top of each page. Useful when
                                   you want to run javadoc on two source bases
-                                  and diff them, as it prevents timestamps from
-                                  causing a diff (which would otherwise be a
-                                  diff on every page). The timestamp includes
-                                  the javadoc version number.
+                                  and diff them, as it prevents timestamps
+                                  from causing a diff (which would otherwise
+                                  be a diff on every page). The timestamp
+                                  includes the javadoc version number.
                                   Defaults to **false**.
 
 * &nbsp;```javadocNoTree```: **true** to omit the class/interface hierarchy
-                             pages from the generated documentation. These are
-                             the pages you reach using the "Tree" button in the
-                             navigation bar.
+                             pages from the generated documentation. These
+                             are the pages you reach using the "Tree" button
+                             in the navigation bar.
                              Defaults to **false**.
 
-* &nbsp;```javadocSplitIndex```: **true** to split the index file into multiple
-                                 files, alphabetically, one file per letter,
-                                 plus a file for any index entries that start
-                                 with non-alphabetical characters.
+* &nbsp;```javadocSplitIndex```: **true** to split the index file into
+                                 multiple files, alphabetically, one file per
+                                 letter, plus a file for any index entries
+                                 that start with non-alphabetical characters.
                                  Defaults to **true**.
 
-* &nbsp;```javadocUse```: **true** to include one "Use" page for each documented
-                          class and package. The page describes what packages,
-                          classes, methods, constructors and fields use any API
-                          of the given class or package. Given class C, things
-                          that use class C would include subclasses of C, fields
-                          declared as C, methods that return C, and methods and
-                          constructors with parameters of type C. You can
-                          access the generated "Use" page by first going to the
-                          class or package, then clicking on the "Use" link in
-                          the navigation bar.
+* &nbsp;```javadocUse```: **true** to include one "Use" page for each
+                          documented class and package. The page describes
+                          what packages, classes, methods, constructors and
+                          fields use any API of the given class or package.
+                          Given class C, things that use class C would
+                          include subclasses of C, fields declared as C,
+                          methods that return C, and methods and constructors
+                          with parameters of type C. You can access the
+                          generated "Use" page by first going to the class or
+                          package, then clicking on the "Use" link in the
+                          navigation bar.
                           Defaults to **true**.
 
 * &nbsp;```javadocVersion```: **true** to include the @version text in the
                               generated documentation.
                               Defaults to **true**.
 
-The defaults for the settings can be overridden by defining the settings in the
-project's ```build-settings.gradle``` file.
+The defaults for the settings can be overridden by defining the settings in
+the project's ```build-settings.gradle``` file.
 
 
 ### <a name="BuildTasksJavaClean"/>clean
 
-The build adjusts this task for Java projects (which includes bnd projects)
+The build adjusts this task for Java projects (which includes Bnd projects)
 such that it removes:
 
 * The class files output directory of all defined sourcesets.
@@ -1087,8 +1096,8 @@ see [Installing Gradle In The Workspace](#InstallingGradleInTheWorkspace).
                                  released version of Gradle being used.
                                  No default.
 
-The defaults for the settings can be overridden by defining the settings in the
-project's ```build-settings.gradle``` file.
+The defaults for the settings can be overridden by defining the settings in
+the project's ```build-settings.gradle``` file.
 
 
 # <a name="BuildOptions"/>Build Options
@@ -1110,13 +1119,13 @@ project's ```build-settings.gradle``` file.
 
   * Presence of the ```-nojunitosgi``` instruction in the ```bnd.bnd``` file.
 
-  * Absence of the ```Test-Cases``` bnd property in the ```bnd.bnd``` file.
+  * Absence of the ```Test-Cases``` Bnd property in the ```bnd.bnd``` file.
 
 * The ```release``` task can be disabled by:
 
   * Presence of the ```-nobundles``` instruction in the ```bnd.bnd``` file.
 
-  * Absence of the ```-releaserepo``` instruction in any of the bnd files.
+  * Absence of the ```-releaserepo``` instruction in any of the Bnd files.
 
 
 ## <a name="BuildOptionsFindbugs"/>Findbugs
@@ -1134,8 +1143,8 @@ property (```-PCI``` on the command line).
 
 ## <a name="CustomisingTheBuildGradle"/>Gradle
 
-The build be can easily customised by putting overrides and additions in any of
-the ```cnf/gradle/custom/*.gradle``` build script hook files,
+The build be can easily customised by putting overrides and additions in any
+of the ```cnf/gradle/custom/*.gradle``` build script hook files,
 see [Build Flow](#BuildFlow).
 
 Also, any project can - on an individual basis - customise build settings or
@@ -1145,27 +1154,11 @@ root directory.
 The ```build-settings.gradle``` file is meant for settings and settings
 overrides, the ```build.gradle``` file is meant for tasks.
 
-An example of a ```build-settings.gradle``` file is shown below. This example
-shows how a project instructs the build to index its ```bundles``` directory
-to generate four indexes named ```example project```.
-
-```
-/* Index task overrides */
-ext.indexTreeRoot        = 'bundles'
-ext.indexTree            = fileTree(indexTreeRoot).include('**/*.jar').exclude('**/*-latest.jar')
-
-ext.indexDirectories     = "${indexTreeRoot};example project;indexTree"
-ext.indexOBRUncompressed = true
-ext.indexOBRCompressed   = true
-ext.indexR5Uncompressed  = true
-ext.indexR5Compressed    = true
-```
-
 
 ## <a name="CustomisingTheBuildBnd"/>Bnd
 
-The bnd default settings are shown in the ```cnf/build.bnd``` file.
-Overrides to workspace-wide bnd settings can be placed in that same file.
+The Bnd default settings are shown in the ```cnf/build.bnd``` file.
+Overrides to workspace-wide Bnd settings can be placed in that same file.
 
 If a setting must be overridden or defined for a specific project, then that
 setting must be defined in the ```bnd.bnd``` file of that specific project.
@@ -1173,7 +1166,7 @@ setting must be defined in the ```bnd.bnd``` file of that specific project.
 
 # <a name="AddingJavaProjectsToTheBuild"/>Adding Java Projects To The Build
 
-The build automatically includes all bnd projects.
+The build automatically includes all Bnd projects.
 
 However, regular Java projects are not included automatically:
 a ```build.gradle``` file or a ```build-settings.gradle``` file in the root
@@ -1181,17 +1174,18 @@ directory of the project is needed to make that happen.
 
 Such projects only need to apply the Gradle Java plugin, setup their
 sourceSets, and setup their build directory. The template will then
-automatically apply the buildscript ```cnf/gradle/template/javaProject.gradle```
-which adds tasks that are relevant to Java projects,
+automatically apply the
+buildscript ```cnf/gradle/template/javaProject.gradle``` which adds tasks
+that are relevant to Java projects,
 see [Java Projects](#BuildTasksJavaProjects).
 
-The ```build-settings.gradle``` file shown below can be used as the basis. This
-will setup the Java project with the default bnd layout and add tasks that are
-relevant to a Java project (```javadoc```, ```findbugs...```, etc.).
+The ```build-settings.gradle``` file shown below can be used as the basis.
+This will setup the Java project with the default Bnd layout and add tasks
+that are relevant to a Java project (```javadoc```, ```findbugs...```, etc.).
 
 ```
 /*
- * A java project with bnd layout
+ * A java project with Bnd layout
  */
 
 assert(project != rootProject)
@@ -1245,6 +1239,34 @@ buildDir = 'target'
 ```
 
 
+# <a name="BuildIndexing"/>OSGi Repository Indexing
+
+Indexing a tree of bundles to generate an OSGi repository index is now
+handled through Bnd's Index task,
+see [Bnd's README](https://github.com/bndtools/bnd/blob/master/biz.aQute.bnd.gradle/README.md#create-a-task-of-the-index-type).
+
+As an example, say you'd want to create a (compressed) repository index of all
+the bundles in the directory ```cnf/somerepo```. You would then create or
+adjust the file ```cnf/build.gradle``` and add something like below:
+
+```
+import aQute.bnd.gradle.Index
+
+task index(type: Index) {
+   destinationDir = file('somerepo')
+   gzip = true
+   indexName = "your-custom-index.xml"
+   repositoryName = "You Custom Index Name"
+   bundles = fileTree(destinationDir) {
+    include '**/*.jar'
+    exclude '**/*-latest.jar'
+    exclude '**/*-sources.jar'
+    exclude '**/*-javadoc.jar'
+  }
+}
+```
+
+
 # <a name="JenkinsBuildSetup"/>Jenkins Build Setup
 
 The screenshot ([Jenkins-Build-Settings.jpg](Jenkins-Build-Settings.jpg)) shows
@@ -1273,15 +1295,3 @@ Ensure your Jenkins has the most recent versions of these plugins.
 This applies especially to the Jacoco plugin since the binary format of Jacoco
 was changed a few times in the second half of 2015.
 
-
-# <a name="ReplacingBndtoolsGradle"/>Replacing The Bndtools Gradle Setup
-
-The bndtools Gradle setup can be easily replaced:
-* Create a new workspace with the Gradle setup of this plugin.
-* Now copy over the relevant files from the new workspace to the workspace
-  in which the setup should be replaced. The files which should be copied over
-  can be found here:
-  * [root](https://github.com/fhuberts/bndtoolsPlugins/tree/master/nl.pelagic.bndtools.headless.build.plugin.gradle/resources/templates/unprocessed/root): these files should be placed in the
-    workspace root.
-  * [cnf](https://github.com/fhuberts/bndtoolsPlugins/tree/master/nl.pelagic.bndtools.headless.build.plugin.gradle/resources/templates/unprocessed/cnf): these directories should be placed in the cnf directory
-    that is in the workspace root.
diff --git a/lib/info.java/cnf/gradle/doc/Bndtools Plugins by Pelagic - Screenshot.png b/lib/info.java/cnf/gradle/doc/Bndtools Plugins by Pelagic - Screenshot.png
deleted file mode 100644 (file)
index 126e37b..0000000
Binary files a/lib/info.java/cnf/gradle/doc/Bndtools Plugins by Pelagic - Screenshot.png and /dev/null differ
index a7c5f5a..4cdc116 100644 (file)
@@ -7,9 +7,54 @@ This workspace is compatible with all bndtools versions since 3.3.0.REL.
 
 # Update Log
 
+# Changes since bndtools 4.1.0 release
+
 * this: -
 
-# Changes since bndtools 3.1.1 release
+# Changes since bndtools 4.0.0 release
+
+* Indexing is now done through the Index task of the Bnd Gradle plugin
+
+# Changes since bndtools 3.5.0 release
+
+* The project moved to GitLab:
+  https://gitlab.com/fhuberts/bndtoolsWorkspace
+
+* Removed the obsolete bnd_preCompileRefresh property
+
+# Changes since bndtools 3.4.0 release
+
+* Update versions in maven files
+
+* Update the jacoco version to 0.7.9
+
+# Changes since bndtools 3.3.0 release
+
+* Fix typos in cnf/ext/repositories.bnd
+
+* update build.bnd
+  Main update is to compile with debug information for non-batch builds.
+
+* Add Maven and Pelagic repositories, remove Bndtools Hub repository
+  Put some relevant bundles in the maven configurations and removed
+  everything from the Build repository: those can be downloaded through
+  the configured Maven repositories.
+
+* Clean up the workspace
+  Removed the bnd repository plugin, it is no longer needed since the
+  bnd gradle plugin contains all the classes that the bnd repository
+  plugin does. Also moved the gradle build dependencies into a file
+  repository to facilitate easier updating from the maven repository
+
+* Make build the default task for all projects
+
+* Add support for the Gradle 'offline' start parameter
+
+# Changes since bndtools 3.2.0 release
+
+* None
+
+# Changes since bndtools 3.1.0 release
 
 * Some documentation snippets were added: section 'Replacing The Bndtools
   Gradle Setup', a remark about using the latest Jenkins plugins, and 2 links
index acc58d7..f6e62ff 100644 (file)
@@ -65,6 +65,7 @@ digraph GradleSetup {
     subgraph cluster106 {
       label="";
       style=invis;
+      testOSGi             [shape=box, style=filled, fillcolor=cyan     , label="testOSGi"            ]
       check                [shape=box, style=filled, fillcolor=cyan     , label="check"               ]
       checkNeeded          [shape=box, style=filled, fillcolor=cyan     , label="checkNeeded"         ]
     }
@@ -79,6 +80,10 @@ digraph GradleSetup {
     subgraph cluster108 {
       label="";
       style=invis;
+      testrunX             [shape=box3d, style=filled, fillcolor=cyan   , label="testrun.<name>"      ]
+      runX                 [shape=box3d, style=filled, fillcolor=cyan   , label="run.<name>"          ]
+      resolveX             [shape=box3d, style=filled, fillcolor=cyan   , label="resolve.<name>"      ]
+      resolve              [shape=box  , style=filled, fillcolor=cyan   , label="resolve"             ]
       exportX              [shape=box3d, style=filled, fillcolor=cyan   , label="export.<name>"       ]
       export               [shape=box  , style=filled, fillcolor=cyan   , label="export"              ]
       runbundlesX          [shape=box3d, style=filled, fillcolor=cyan   , label="runbundles.<name>"   ]
@@ -119,7 +124,8 @@ digraph GradleSetup {
     jar                    -> assemble
     testClasses            -> test
     assemble               -> build
-    assemble               -> check
+    assemble               -> testOSGi
+    testOSGi               -> check
     test                   -> check
     check                  -> checkNeeded
     checkNeeded            -> checkNeeded        [color=red   ]
@@ -133,6 +139,10 @@ digraph GradleSetup {
     assemble               -> release
     assemble               -> exportX
     exportX                -> export
+    assemble               -> resolveX
+    resolveX               -> resolve
+    assemble               -> runX
+    assemble               -> testrunX
     assemble               -> runbundlesX
     runbundlesX            -> runbundles
     release                -> releaseNeeded
@@ -160,12 +170,6 @@ digraph GradleSetup {
     subgraph cluster201 {
       label="";
       style=invis;
-      index                [shape=box, style=filled, fillcolor=orange   , label="index"               ]
-    }
-
-    subgraph cluster202 {
-      label="";
-      style=invis;
       cleanAll             [shape=box, style=filled, fillcolor=orange   , label="clean"               ]
       cleanAllNeeded       [shape=box, style=filled, fillcolor=orange   , label="cleanNeeded"         ]
       distclean            [shape=box, style=filled, fillcolor=orange   , label="distclean"           ]
index 05fe38d..699b7b0 100644 (file)
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
  "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<!-- Generated by graphviz version 2.34.0 (20140110.0949)
+<!-- Generated by graphviz version 2.40.1 (0)
  -->
 <!-- Title: GradleSetup Pages: 1 -->
-<svg width="1028pt" height="752pt"
- viewBox="0.00 0.00 1028.00 752.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+<svg width="1712pt" height="752pt"
+ viewBox="0.00 0.00 1712.00 752.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
 <g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 748)">
 <title>GradleSetup</title>
-<polygon fill="white" stroke="white" points="-4,4 -4,-748 1024,-748 1024,4 -4,4"/>
-<text text-anchor="middle" x="61" y="-728.8" font-family="Times,serif" font-size="14.00">Gradle Build Setup</text>
-<g id="clust1" class="cluster"><title>cluster1</title>
-<polygon fill="lightgrey" stroke="black" points="8,-8 8,-713 706,-713 706,-8 8,-8"/>
-<text text-anchor="middle" x="92.5" y="-15.8" font-family="Times,serif" font-size="14.00">Java Projects / Bnd Projects</text>
+<polygon fill="#ffffff" stroke="transparent" points="-4,4 -4,-748 1708,-748 1708,4 -4,4"/>
+<text text-anchor="middle" x="76.5" y="-728.8" font-family="Times,serif" font-size="14.00" fill="#000000">Gradle Build Setup</text>
+<g id="clust1" class="cluster">
+<title>cluster1</title>
+<polygon fill="#d3d3d3" stroke="#000000" points="8,-8 8,-713 1428,-713 1428,-8 8,-8"/>
+<text text-anchor="middle" x="116.5" y="-15.8" font-family="Times,serif" font-size="14.00" fill="#000000">Java Projects / Bnd Projects</text>
 </g>
-<g id="clust2" class="cluster"><title>cluster101</title>
+<g id="clust2" class="cluster">
+<title>cluster101</title>
 </g>
-<g id="clust3" class="cluster"><title>cluster102</title>
+<g id="clust3" class="cluster">
+<title>cluster102</title>
 </g>
-<g id="clust4" class="cluster"><title>cluster103</title>
+<g id="clust4" class="cluster">
+<title>cluster103</title>
 </g>
-<g id="clust5" class="cluster"><title>cluster104</title>
+<g id="clust5" class="cluster">
+<title>cluster104</title>
 </g>
-<g id="clust6" class="cluster"><title>cluster105</title>
+<g id="clust6" class="cluster">
+<title>cluster105</title>
 </g>
-<g id="clust7" class="cluster"><title>cluster106</title>
+<g id="clust7" class="cluster">
+<title>cluster106</title>
 </g>
-<g id="clust8" class="cluster"><title>cluster107</title>
+<g id="clust8" class="cluster">
+<title>cluster107</title>
 </g>
-<g id="clust9" class="cluster"><title>cluster108</title>
+<g id="clust9" class="cluster">
+<title>cluster108</title>
 </g>
-<g id="clust10" class="cluster"><title>cluster109</title>
+<g id="clust10" class="cluster">
+<title>cluster109</title>
 </g>
-<g id="clust11" class="cluster"><title>cluster110</title>
+<g id="clust11" class="cluster">
+<title>cluster110</title>
 </g>
-<g id="clust12" class="cluster"><title>cluster2</title>
-<polygon fill="lightgrey" stroke="black" points="714,-387 714,-622 1012,-622 1012,-387 714,-387"/>
-<text text-anchor="middle" x="754.5" y="-394.8" font-family="Times,serif" font-size="14.00">All Projects</text>
+<g id="clust12" class="cluster">
+<title>cluster2</title>
+<polygon fill="#d3d3d3" stroke="#000000" points="1436,-387 1436,-622 1696,-622 1696,-387 1436,-387"/>
+<text text-anchor="middle" x="1486" y="-394.8" font-family="Times,serif" font-size="14.00" fill="#000000">All Projects</text>
 </g>
-<g id="clust13" class="cluster"><title>cluster201</title>
+<g id="clust13" class="cluster">
+<title>cluster201</title>
 </g>
-<g id="clust14" class="cluster"><title>cluster202</title>
-</g>
-<g id="clust15" class="cluster"><title>cluster3</title>
-<polygon fill="lightgrey" stroke="black" points="788,-630 788,-705 938,-705 938,-630 788,-630"/>
-<text text-anchor="middle" x="830.5" y="-637.8" font-family="Times,serif" font-size="14.00">Root Project</text>
+<g id="clust14" class="cluster">
+<title>cluster3</title>
+<polygon fill="#d3d3d3" stroke="#000000" points="1483,-630 1483,-705 1649,-705 1649,-630 1483,-630"/>
+<text text-anchor="middle" x="1536" y="-637.8" font-family="Times,serif" font-size="14.00" fill="#000000">Root Project</text>
 </g>
 <!-- compileJava -->
-<g id="node1" class="node"><title>compileJava</title>
-<polygon fill="lightcyan" stroke="black" points="484.25,-697 399.75,-697 399.75,-661 484.25,-661 484.25,-697"/>
-<text text-anchor="middle" x="442" y="-675.3" font-family="Times,serif" font-size="14.00">compileJava</text>
+<g id="node1" class="node">
+<title>compileJava</title>
+<polygon fill="#e0ffff" stroke="#000000" points="698,-697 594,-697 594,-661 698,-661 698,-697"/>
+<text text-anchor="middle" x="646" y="-675.3" font-family="Times,serif" font-size="14.00" fill="#000000">compileJava</text>
 </g>
 <!-- classes -->
-<g id="node3" class="node"><title>classes</title>
-<polygon fill="lightcyan" stroke="black" points="352,-606 298,-606 298,-570 352,-570 352,-606"/>
-<text text-anchor="middle" x="325" y="-584.3" font-family="Times,serif" font-size="14.00">classes</text>
+<g id="node3" class="node">
+<title>classes</title>
+<polygon fill="#e0ffff" stroke="#000000" points="537,-606 469,-606 469,-570 537,-570 537,-606"/>
+<text text-anchor="middle" x="503" y="-584.3" font-family="Times,serif" font-size="14.00" fill="#000000">classes</text>
 </g>
 <!-- compileJava&#45;&gt;classes -->
-<g id="edge1" class="edge"><title>compileJava&#45;&gt;classes</title>
-<path fill="none" stroke="black" d="M424.895,-660.724C415.074,-651.194 402.285,-639.419 390,-630 380.92,-623.039 370.631,-616.141 360.96,-610.045"/>
-<polygon fill="black" stroke="black" points="362.651,-606.976 352.305,-604.694 358.97,-612.93 362.651,-606.976"/>
+<g id="edge1" class="edge">
+<title>compileJava&#45;&gt;classes</title>
+<path fill="none" stroke="#000000" d="M625.6214,-660.8935C614.1264,-651.1339 599.2489,-639.2349 585,-630 572.9031,-622.1599 559.1606,-614.6345 546.4304,-608.174"/>
+<polygon fill="#000000" stroke="#000000" points="547.8898,-604.9909 537.3778,-603.6687 544.7709,-611.2577 547.8898,-604.9909"/>
 </g>
 <!-- processResources -->
-<g id="node2" class="node"><title>processResources</title>
-<polygon fill="lightcyan" stroke="black" points="381.25,-697 268.75,-697 268.75,-661 381.25,-661 381.25,-697"/>
-<text text-anchor="middle" x="325" y="-675.3" font-family="Times,serif" font-size="14.00">processResources</text>
+<g id="node2" class="node">
+<title>processResources</title>
+<polygon fill="#e0ffff" stroke="#000000" points="576,-697 430,-697 430,-661 576,-661 576,-697"/>
+<text text-anchor="middle" x="503" y="-675.3" font-family="Times,serif" font-size="14.00" fill="#000000">processResources</text>
 </g>
 <!-- processResources&#45;&gt;classes -->
-<g id="edge2" class="edge"><title>processResources&#45;&gt;classes</title>
-<path fill="none" stroke="black" d="M325,-660.84C325,-648.281 325,-630.979 325,-616.502"/>
-<polygon fill="black" stroke="black" points="328.5,-616.107 325,-606.107 321.5,-616.107 328.5,-616.107"/>
+<g id="edge2" class="edge">
+<title>processResources&#45;&gt;classes</title>
+<path fill="none" stroke="#000000" d="M503,-660.5848C503,-647.9209 503,-630.8558 503,-616.4541"/>
+<polygon fill="#000000" stroke="#000000" points="506.5001,-616.0772 503,-606.0773 499.5001,-616.0773 506.5001,-616.0772"/>
 </g>
 <!-- jar -->
-<g id="node4" class="node"><title>jar</title>
-<polygon fill="cyan" stroke="black" points="409,-534 355,-534 355,-498 409,-498 409,-534"/>
-<text text-anchor="middle" x="382" y="-512.3" font-family="Times,serif" font-size="14.00">jar</text>
+<g id="node4" class="node">
+<title>jar</title>
+<polygon fill="#00ffff" stroke="#000000" points="634,-534 580,-534 580,-498 634,-498 634,-534"/>
+<text text-anchor="middle" x="607" y="-512.3" font-family="Times,serif" font-size="14.00" fill="#000000">jar</text>
 </g>
 <!-- classes&#45;&gt;jar -->
-<g id="edge4" class="edge"><title>classes&#45;&gt;jar</title>
-<path fill="none" stroke="black" d="M339.09,-569.697C345.923,-561.305 354.257,-551.07 361.756,-541.861"/>
-<polygon fill="black" stroke="black" points="364.472,-544.069 368.072,-534.104 359.044,-539.649 364.472,-544.069"/>
+<g id="edge4" class="edge">
+<title>classes&#45;&gt;jar</title>
+<path fill="none" stroke="#000000" d="M529.2436,-569.8314C542.2995,-560.7927 558.2535,-549.7476 572.3047,-540.0198"/>
+<polygon fill="#000000" stroke="#000000" points="574.5351,-542.7326 580.7648,-534.1628 570.5506,-536.9773 574.5351,-542.7326"/>
 </g>
 <!-- compileTestJava -->
-<g id="node5" class="node"><title>compileTestJava</title>
-<polygon fill="lightcyan" stroke="black" points="307,-534 199,-534 199,-498 307,-498 307,-534"/>
-<text text-anchor="middle" x="253" y="-512.3" font-family="Times,serif" font-size="14.00">compileTestJava</text>
+<g id="node5" class="node">
+<title>compileTestJava</title>
+<polygon fill="#e0ffff" stroke="#000000" points="504,-534 370,-534 370,-498 504,-498 504,-534"/>
+<text text-anchor="middle" x="437" y="-512.3" font-family="Times,serif" font-size="14.00" fill="#000000">compileTestJava</text>
 </g>
 <!-- classes&#45;&gt;compileTestJava -->
-<g id="edge3" class="edge"><title>classes&#45;&gt;compileTestJava</title>
-<path fill="none" stroke="black" d="M307.202,-569.697C298.396,-561.135 287.618,-550.656 277.999,-541.304"/>
-<polygon fill="black" stroke="black" points="280.203,-538.566 270.593,-534.104 275.323,-543.585 280.203,-538.566"/>
+<g id="edge3" class="edge">
+<title>classes&#45;&gt;compileTestJava</title>
+<path fill="none" stroke="#000000" d="M486.3454,-569.8314C478.5886,-561.3694 469.2198,-551.1489 460.739,-541.8971"/>
+<polygon fill="#000000" stroke="#000000" points="463.2162,-539.4198 453.8788,-534.4133 458.0561,-544.1499 463.2162,-539.4198"/>
 </g>
 <!-- test -->
-<g id="node8" class="node"><title>test</title>
-<polygon fill="lightcyan" stroke="black" points="78,-371 24,-371 24,-335 78,-335 78,-371"/>
-<text text-anchor="middle" x="51" y="-349.3" font-family="Times,serif" font-size="14.00">test</text>
+<g id="node8" class="node">
+<title>test</title>
+<polygon fill="#e0ffff" stroke="#000000" points="138,-371 84,-371 84,-335 138,-335 138,-371"/>
+<text text-anchor="middle" x="111" y="-349.3" font-family="Times,serif" font-size="14.00" fill="#000000">test</text>
 </g>
 <!-- classes&#45;&gt;test -->
-<g id="edge5" class="edge"><title>classes&#45;&gt;test</title>
-<path fill="none" stroke="black" d="M297.967,-587.1C232.26,-586.709 67.0613,-581.713 33,-542 -11.849,-489.71 15.9784,-453.753 33,-387 33.5634,-384.791 34.3082,-382.57 35.1745,-380.382"/>
-<polygon fill="black" stroke="black" points="38.4373,-381.67 39.5639,-371.135 32.1136,-378.668 38.4373,-381.67"/>
+<g id="edge5" class="edge">
+<title>classes&#45;&gt;test</title>
+<path fill="none" stroke="#000000" d="M468.739,-585.52C386.8442,-579.293 184.8353,-562.0548 162,-542 115.6047,-501.254 109.3756,-423.1475 109.6689,-381.2334"/>
+<polygon fill="#000000" stroke="#000000" points="113.1696,-381.2273 109.8715,-371.1589 106.171,-381.0864 113.1696,-381.2273"/>
 </g>
 <!-- uploadArchives -->
-<g id="node9" class="node"><title>uploadArchives</title>
-<polygon fill="lightcyan" stroke="black" points="433,-462 331,-462 331,-426 433,-426 433,-462"/>
-<text text-anchor="middle" x="382" y="-440.3" font-family="Times,serif" font-size="14.00">uploadArchives</text>
+<g id="node9" class="node">
+<title>uploadArchives</title>
+<polygon fill="#e0ffff" stroke="#000000" points="671,-462 543,-462 543,-426 671,-426 671,-462"/>
+<text text-anchor="middle" x="607" y="-440.3" font-family="Times,serif" font-size="14.00" fill="#000000">uploadArchives</text>
 </g>
 <!-- jar&#45;&gt;uploadArchives -->
-<g id="edge8" class="edge"><title>jar&#45;&gt;uploadArchives</title>
-<path fill="none" stroke="black" d="M382,-497.697C382,-489.983 382,-480.712 382,-472.112"/>
-<polygon fill="black" stroke="black" points="385.5,-472.104 382,-462.104 378.5,-472.104 385.5,-472.104"/>
+<g id="edge8" class="edge">
+<title>jar&#45;&gt;uploadArchives</title>
+<path fill="none" stroke="#000000" d="M607,-497.8314C607,-490.131 607,-480.9743 607,-472.4166"/>
+<polygon fill="#000000" stroke="#000000" points="610.5001,-472.4132 607,-462.4133 603.5001,-472.4133 610.5001,-472.4132"/>
 </g>
 <!-- assemble -->
-<g id="node10" class="node"><title>assemble</title>
-<polygon fill="lightcyan" stroke="black" points="518.25,-462 451.75,-462 451.75,-426 518.25,-426 518.25,-462"/>
-<text text-anchor="middle" x="485" y="-440.3" font-family="Times,serif" font-size="14.00">assemble</text>
+<g id="node10" class="node">
+<title>assemble</title>
+<polygon fill="#e0ffff" stroke="#000000" points="772.5,-462 689.5,-462 689.5,-426 772.5,-426 772.5,-462"/>
+<text text-anchor="middle" x="731" y="-440.3" font-family="Times,serif" font-size="14.00" fill="#000000">assemble</text>
 </g>
 <!-- jar&#45;&gt;assemble -->
-<g id="edge9" class="edge"><title>jar&#45;&gt;assemble</title>
-<path fill="none" stroke="black" d="M407.197,-497.876C420.414,-488.893 436.792,-477.763 451.107,-468.034"/>
-<polygon fill="black" stroke="black" points="453.403,-470.705 459.707,-462.19 449.468,-464.916 453.403,-470.705"/>
+<g id="edge9" class="edge">
+<title>jar&#45;&gt;assemble</title>
+<path fill="none" stroke="#000000" d="M634.2123,-500.1993C650.8768,-490.5231 672.4988,-477.9685 691.0782,-467.1804"/>
+<polygon fill="#000000" stroke="#000000" points="693.0292,-470.0949 699.9196,-462.0467 689.5142,-464.0413 693.0292,-470.0949"/>
 </g>
 <!-- testClasses -->
-<g id="node7" class="node"><title>testClasses</title>
-<polygon fill="lightcyan" stroke="black" points="151,-462 75,-462 75,-426 151,-426 151,-462"/>
-<text text-anchor="middle" x="113" y="-440.3" font-family="Times,serif" font-size="14.00">testClasses</text>
+<g id="node7" class="node">
+<title>testClasses</title>
+<polygon fill="#e0ffff" stroke="#000000" points="312.5,-462 213.5,-462 213.5,-426 312.5,-426 312.5,-462"/>
+<text text-anchor="middle" x="263" y="-440.3" font-family="Times,serif" font-size="14.00" fill="#000000">testClasses</text>
 </g>
 <!-- compileTestJava&#45;&gt;testClasses -->
-<g id="edge6" class="edge"><title>compileTestJava&#45;&gt;testClasses</title>
-<path fill="none" stroke="black" d="M218.752,-497.876C199.939,-488.469 176.415,-476.708 156.334,-466.667"/>
-<polygon fill="black" stroke="black" points="157.889,-463.531 147.38,-462.19 154.759,-469.792 157.889,-463.531"/>
+<g id="edge6" class="edge">
+<title>compileTestJava&#45;&gt;testClasses</title>
+<path fill="none" stroke="#000000" d="M393.0925,-497.8314C369.7176,-488.159 340.7903,-476.1891 316.1532,-465.9944"/>
+<polygon fill="#000000" stroke="#000000" points="317.1702,-462.6275 306.5918,-462.038 314.4937,-469.0956 317.1702,-462.6275"/>
 </g>
 <!-- processTestResources -->
-<g id="node6" class="node"><title>processTestResources</title>
-<polygon fill="lightcyan" stroke="black" points="181,-534 45,-534 45,-498 181,-498 181,-534"/>
-<text text-anchor="middle" x="113" y="-512.3" font-family="Times,serif" font-size="14.00">processTestResources</text>
+<g id="node6" class="node">
+<title>processTestResources</title>
+<polygon fill="#e0ffff" stroke="#000000" points="351.5,-534 174.5,-534 174.5,-498 351.5,-498 351.5,-534"/>
+<text text-anchor="middle" x="263" y="-512.3" font-family="Times,serif" font-size="14.00" fill="#000000">processTestResources</text>
 </g>
 <!-- processTestResources&#45;&gt;testClasses -->
-<g id="edge7" class="edge"><title>processTestResources&#45;&gt;testClasses</title>
-<path fill="none" stroke="black" d="M113,-497.697C113,-489.983 113,-480.712 113,-472.112"/>
-<polygon fill="black" stroke="black" points="116.5,-472.104 113,-462.104 109.5,-472.104 116.5,-472.104"/>
+<g id="edge7" class="edge">
+<title>processTestResources&#45;&gt;testClasses</title>
+<path fill="none" stroke="#000000" d="M263,-497.8314C263,-490.131 263,-480.9743 263,-472.4166"/>
+<polygon fill="#000000" stroke="#000000" points="266.5001,-472.4132 263,-462.4133 259.5001,-472.4133 266.5001,-472.4132"/>
 </g>
 <!-- testClasses&#45;&gt;test -->
-<g id="edge10" class="edge"><title>testClasses&#45;&gt;test</title>
-<path fill="none" stroke="black" d="M101.046,-425.84C91.8682,-412.666 79.0545,-394.272 68.6905,-379.394"/>
-<polygon fill="black" stroke="black" points="71.5055,-377.312 62.9175,-371.107 65.7618,-381.313 71.5055,-377.312"/>
+<g id="edge10" class="edge">
+<title>testClasses&#45;&gt;test</title>
+<path fill="none" stroke="#000000" d="M232.6059,-425.8035C207.8839,-411.0029 172.9453,-390.0857 146.8574,-374.4673"/>
+<polygon fill="#000000" stroke="#000000" points="148.4079,-371.3163 138.0302,-369.1825 144.8122,-377.3222 148.4079,-371.3163"/>
 </g>
 <!-- check -->
-<g id="node11" class="node"><title>check</title>
-<polygon fill="cyan" stroke="black" points="227,-227 173,-227 173,-191 227,-191 227,-227"/>
-<text text-anchor="middle" x="200" y="-205.3" font-family="Times,serif" font-size="14.00">check</text>
+<g id="node12" class="node">
+<title>check</title>
+<polygon fill="#00ffff" stroke="#000000" points="383.5,-227 324.5,-227 324.5,-191 383.5,-191 383.5,-227"/>
+<text text-anchor="middle" x="354" y="-205.3" font-family="Times,serif" font-size="14.00" fill="#000000">check</text>
 </g>
 <!-- test&#45;&gt;check -->
-<g id="edge13" class="edge"><title>test&#45;&gt;check</title>
-<path fill="none" stroke="black" d="M43.1474,-334.66C34.7942,-313.289 25.157,-277.097 44,-255 80.5056,-212.189 117.597,-257.873 169,-235 170.563,-234.304 172.114,-233.51 173.64,-232.641"/>
-<polygon fill="black" stroke="black" points="175.652,-235.507 182.026,-227.043 171.766,-229.685 175.652,-235.507"/>
+<g id="edge14" class="edge">
+<title>test&#45;&gt;check</title>
+<path fill="none" stroke="#000000" d="M83.8097,-341.9858C69.163,-334.4811 52.413,-322.9811 44,-307 33.2342,-286.5496 28.5046,-272.1469 44,-255 83.3152,-211.4945 244.1627,-241.5817 314.1963,-228.0082"/>
+<polygon fill="#000000" stroke="#000000" points="315.3509,-231.3292 324.2351,-225.5568 313.6903,-224.529 315.3509,-231.3292"/>
 </g>
 <!-- findbugsTest -->
-<g id="node23" class="node"><title>findbugsTest</title>
-<polygon fill="orange" stroke="black" points="143.25,-299 56.75,-299 56.75,-263 143.25,-263 143.25,-299"/>
-<text text-anchor="middle" x="100" y="-277.3" font-family="Times,serif" font-size="14.00">findbugsTest</text>
+<g id="node28" class="node">
+<title>findbugsTest</title>
+<polygon fill="#ffa500" stroke="#000000" points="166,-299 56,-299 56,-263 166,-263 166,-299"/>
+<text text-anchor="middle" x="111" y="-277.3" font-family="Times,serif" font-size="14.00" fill="#000000">findbugsTest</text>
 </g>
 <!-- test&#45;&gt;findbugsTest -->
-<g id="edge32" class="edge"><title>test&#45;&gt;findbugsTest</title>
-<path fill="none" stroke="black" d="M63.1124,-334.697C68.8681,-326.474 75.8617,-316.483 82.2055,-307.421"/>
-<polygon fill="black" stroke="black" points="85.1596,-309.304 88.027,-299.104 79.425,-305.29 85.1596,-309.304"/>
+<g id="edge37" class="edge">
+<title>test&#45;&gt;findbugsTest</title>
+<path fill="none" stroke="#000000" d="M111,-334.8314C111,-327.131 111,-317.9743 111,-309.4166"/>
+<polygon fill="#000000" stroke="#000000" points="114.5001,-309.4132 111,-299.4133 107.5001,-309.4133 114.5001,-309.4132"/>
 </g>
 <!-- jacocoTestReport -->
-<g id="node29" class="node"><title>jacocoTestReport</title>
-<polygon fill="orange" stroke="black" points="133,-155 21,-155 21,-119 133,-119 133,-155"/>
-<text text-anchor="middle" x="77" y="-133.3" font-family="Times,serif" font-size="14.00">jacocoTestReport</text>
+<g id="node34" class="node">
+<title>jacocoTestReport</title>
+<polygon fill="#ffa500" stroke="#000000" points="232,-155 90,-155 90,-119 232,-119 232,-155"/>
+<text text-anchor="middle" x="161" y="-133.3" font-family="Times,serif" font-size="14.00" fill="#000000">jacocoTestReport</text>
 </g>
 <!-- test&#45;&gt;jacocoTestReport -->
-<g id="edge35" class="edge"><title>test&#45;&gt;jacocoTestReport</title>
-<path fill="none" stroke="magenta" d="M40.749,-334.68C36.5258,-326.568 32.1287,-316.595 30,-307 24.9945,-284.437 25.6128,-277.691 30,-255 36.2903,-222.466 51.5749,-187.499 63.0177,-164.351"/>
-<polygon fill="magenta" stroke="magenta" points="66.2581,-165.699 67.6491,-155.196 60.0119,-162.539 66.2581,-165.699"/>
+<g id="edge40" class="edge">
+<title>test&#45;&gt;jacocoTestReport</title>
+<path fill="none" stroke="#ff00ff" d="M83.9211,-345.3294C65.4321,-338.5221 42.3122,-326.5535 31,-307 19.4268,-286.9954 21.6422,-276.1319 31,-255 49.1625,-213.9852 89.4035,-181.1312 120.3369,-160.6093"/>
+<polygon fill="#ff00ff" stroke="#ff00ff" points="122.2867,-163.5165 128.7888,-155.1515 118.4893,-157.636 122.2867,-163.5165"/>
 </g>
 <!-- assemble&#45;&gt;compileJava -->
-<g id="edge21" class="edge"><title>assemble&#45;&gt;compileJava</title>
-<path fill="none" stroke="red" d="M479.281,-462.228C472.003,-484.858 459.587,-525.955 453,-562 447.506,-592.063 444.665,-627.042 443.26,-650.664"/>
-<polygon fill="red" stroke="red" points="439.748,-650.792 442.695,-660.969 446.737,-651.175 439.748,-650.792"/>
-</g>
-<!-- assemble&#45;&gt;check -->
-<g id="edge12" class="edge"><title>assemble&#45;&gt;check</title>
-<path fill="none" stroke="black" d="M476.932,-425.738C469.769,-412.589 457.959,-395.366 442,-387 426.136,-378.685 294.056,-391.261 281,-379 240.571,-341.033 295.794,-302.401 267,-255 259.696,-242.976 247.814,-233.461 236.07,-226.337"/>
-<polygon fill="black" stroke="black" points="237.627,-223.198 227.194,-221.354 234.2,-229.302 237.627,-223.198"/>
+<g id="edge22" class="edge">
+<title>assemble&#45;&gt;compileJava</title>
+<path fill="none" stroke="#ff0000" d="M724.4491,-462.1113C709.6564,-503.0087 673.5892,-602.724 655.9896,-651.3817"/>
+<polygon fill="#ff0000" stroke="#ff0000" points="652.6388,-650.3559 652.5287,-660.9502 659.2214,-652.7369 652.6388,-650.3559"/>
+</g>
+<!-- testOSGi -->
+<g id="node11" class="node">
+<title>testOSGi</title>
+<polygon fill="#00ffff" stroke="#000000" points="432,-299 350,-299 350,-263 432,-263 432,-299"/>
+<text text-anchor="middle" x="391" y="-277.3" font-family="Times,serif" font-size="14.00" fill="#000000">testOSGi</text>
+</g>
+<!-- assemble&#45;&gt;testOSGi -->
+<g id="edge12" class="edge">
+<title>assemble&#45;&gt;testOSGi</title>
+<path fill="none" stroke="#000000" d="M720.3778,-425.7648C711.4718,-412.3906 697.4244,-395.1921 680,-387 637.7374,-367.1301 511.7376,-399.9501 470,-379 439.9593,-363.9211 417.4991,-331.5856 404.3545,-308.1726"/>
+<polygon fill="#000000" stroke="#000000" points="407.2777,-306.2188 399.4564,-299.0719 401.1137,-309.5363 407.2777,-306.2188"/>
 </g>
 <!-- release -->
-<g id="node13" class="node"><title>release</title>
-<polygon fill="cyan" stroke="black" points="387,-371 333,-371 333,-335 387,-335 387,-371"/>
-<text text-anchor="middle" x="360" y="-349.3" font-family="Times,serif" font-size="14.00">release</text>
+<g id="node14" class="node">
+<title>release</title>
+<polygon fill="#00ffff" stroke="#000000" points="601,-371 533,-371 533,-335 601,-335 601,-371"/>
+<text text-anchor="middle" x="567" y="-349.3" font-family="Times,serif" font-size="14.00" fill="#000000">release</text>
 </g>
 <!-- assemble&#45;&gt;release -->
-<g id="edge22" class="edge"><title>assemble&#45;&gt;release</title>
-<path fill="none" stroke="black" d="M475.569,-425.897C467.963,-413.532 456.211,-397.261 442,-387 433.225,-380.664 429.099,-382.891 419,-379 411.792,-376.223 404.153,-373.113 396.848,-370.055"/>
-<polygon fill="black" stroke="black" points="397.738,-366.631 387.165,-365.954 395.008,-373.077 397.738,-366.631"/>
+<g id="edge23" class="edge">
+<title>assemble&#45;&gt;release</title>
+<path fill="none" stroke="#000000" d="M719.6466,-425.9088C710.5404,-412.9745 696.5687,-396.276 680,-387 662.6568,-377.2904 655.1555,-384.3036 636,-379 627.7533,-376.7167 619.1089,-373.8532 610.8368,-370.8681"/>
+<polygon fill="#000000" stroke="#000000" points="611.9359,-367.5427 601.3431,-367.3355 609.4947,-374.1032 611.9359,-367.5427"/>
+</g>
+<!-- testrunX -->
+<g id="node16" class="node">
+<title>testrunX</title>
+<polygon fill="#00ffff" stroke="#000000" points="1399.5,-371 1266.5,-371 1262.5,-367 1262.5,-335 1395.5,-335 1399.5,-339 1399.5,-371"/>
+<polyline fill="none" stroke="#000000" points="1395.5,-367 1262.5,-367 "/>
+<polyline fill="none" stroke="#000000" points="1395.5,-367 1395.5,-335 "/>
+<polyline fill="none" stroke="#000000" points="1395.5,-367 1399.5,-371 "/>
+<text text-anchor="middle" x="1331" y="-349.3" font-family="Times,serif" font-size="14.00" fill="#000000">testrun.&lt;name&gt;</text>
+</g>
+<!-- assemble&#45;&gt;testrunX -->
+<g id="edge29" class="edge">
+<title>assemble&#45;&gt;testrunX</title>
+<path fill="none" stroke="#000000" d="M772.5138,-441.6959C861.6571,-436.1273 1077.6107,-419.3053 1254,-379 1260.1382,-377.5974 1266.4761,-375.8938 1272.7577,-374.0367"/>
+<polygon fill="#000000" stroke="#000000" points="1274.024,-377.3088 1282.5455,-371.0132 1271.9579,-370.6206 1274.024,-377.3088"/>
+</g>
+<!-- runX -->
+<g id="node17" class="node">
+<title>runX</title>
+<polygon fill="#00ffff" stroke="#000000" points="1244.5,-371 1139.5,-371 1135.5,-367 1135.5,-335 1240.5,-335 1244.5,-339 1244.5,-371"/>
+<polyline fill="none" stroke="#000000" points="1240.5,-367 1135.5,-367 "/>
+<polyline fill="none" stroke="#000000" points="1240.5,-367 1240.5,-335 "/>
+<polyline fill="none" stroke="#000000" points="1240.5,-367 1244.5,-371 "/>
+<text text-anchor="middle" x="1190" y="-349.3" font-family="Times,serif" font-size="14.00" fill="#000000">run.&lt;name&gt;</text>
+</g>
+<!-- assemble&#45;&gt;runX -->
+<g id="edge28" class="edge">
+<title>assemble&#45;&gt;runX</title>
+<path fill="none" stroke="#000000" d="M772.6023,-440.2323C845.3408,-432.9674 999.8993,-414.5096 1126,-379 1130.5924,-377.7068 1135.3029,-376.1877 1139.984,-374.5441"/>
+<polygon fill="#000000" stroke="#000000" points="1141.336,-377.7759 1149.504,-371.028 1138.9107,-371.2095 1141.336,-377.7759"/>
+</g>
+<!-- resolveX -->
+<g id="node18" class="node">
+<title>resolveX</title>
+<polygon fill="#00ffff" stroke="#000000" points="1117,-371 985,-371 981,-367 981,-335 1113,-335 1117,-339 1117,-371"/>
+<polyline fill="none" stroke="#000000" points="1113,-367 981,-367 "/>
+<polyline fill="none" stroke="#000000" points="1113,-367 1113,-335 "/>
+<polyline fill="none" stroke="#000000" points="1113,-367 1117,-371 "/>
+<text text-anchor="middle" x="1049" y="-349.3" font-family="Times,serif" font-size="14.00" fill="#000000">resolve.&lt;name&gt;</text>
+</g>
+<!-- assemble&#45;&gt;resolveX -->
+<g id="edge26" class="edge">
+<title>assemble&#45;&gt;resolveX</title>
+<path fill="none" stroke="#000000" d="M772.5883,-433.6214C820.8012,-421.3961 902.5392,-400.072 972,-379 976.9367,-377.5024 982.0338,-375.9022 987.145,-374.2593"/>
+<polygon fill="#000000" stroke="#000000" points="988.5295,-377.4894 996.9528,-371.063 986.3604,-370.8339 988.5295,-377.4894"/>
 </g>
 <!-- exportX -->
-<g id="node15" class="node"><title>exportX</title>
-<polygon fill="cyan" stroke="black" points="677.25,-371 580.75,-371 576.75,-367 576.75,-335 673.25,-335 677.25,-339 677.25,-371"/>
-<polyline fill="none" stroke="black" points="673.25,-367 576.75,-367 "/>
-<polyline fill="none" stroke="black" points="673.25,-367 673.25,-335 "/>
-<polyline fill="none" stroke="black" points="673.25,-367 677.25,-371 "/>
-<text text-anchor="middle" x="627" y="-349.3" font-family="Times,serif" font-size="14.00">export.&lt;name&gt;</text>
+<g id="node20" class="node">
+<title>exportX</title>
+<polygon fill="#00ffff" stroke="#000000" points="962.5,-371 835.5,-371 831.5,-367 831.5,-335 958.5,-335 962.5,-339 962.5,-371"/>
+<polyline fill="none" stroke="#000000" points="958.5,-367 831.5,-367 "/>
+<polyline fill="none" stroke="#000000" points="958.5,-367 958.5,-335 "/>
+<polyline fill="none" stroke="#000000" points="958.5,-367 962.5,-371 "/>
+<text text-anchor="middle" x="897" y="-349.3" font-family="Times,serif" font-size="14.00" fill="#000000">export.&lt;name&gt;</text>
 </g>
 <!-- assemble&#45;&gt;exportX -->
-<g id="edge23" class="edge"><title>assemble&#45;&gt;exportX</title>
-<path fill="none" stroke="black" d="M512.379,-425.84C534.774,-411.804 566.622,-391.843 591.066,-376.522"/>
-<polygon fill="black" stroke="black" points="593.091,-379.384 599.705,-371.107 589.373,-373.453 593.091,-379.384"/>
+<g id="edge24" class="edge">
+<title>assemble&#45;&gt;exportX</title>
+<path fill="none" stroke="#000000" d="M764.1936,-425.8035C790.4039,-411.4352 827.1295,-391.3025 855.3189,-375.8493"/>
+<polygon fill="#000000" stroke="#000000" points="857.0608,-378.8858 864.1472,-371.0097 853.6959,-372.7476 857.0608,-378.8858"/>
 </g>
 <!-- runbundlesX -->
-<g id="node17" class="node"><title>runbundlesX</title>
-<polygon fill="cyan" stroke="black" points="558.25,-371 435.75,-371 431.75,-367 431.75,-335 554.25,-335 558.25,-339 558.25,-371"/>
-<polyline fill="none" stroke="black" points="554.25,-367 431.75,-367 "/>
-<polyline fill="none" stroke="black" points="554.25,-367 554.25,-335 "/>
-<polyline fill="none" stroke="black" points="554.25,-367 558.25,-371 "/>
-<text text-anchor="middle" x="495" y="-349.3" font-family="Times,serif" font-size="14.00">runbundles.&lt;name&gt;</text>
+<g id="node22" class="node">
+<title>runbundlesX</title>
+<polygon fill="#00ffff" stroke="#000000" points="813.5,-371 652.5,-371 648.5,-367 648.5,-335 809.5,-335 813.5,-339 813.5,-371"/>
+<polyline fill="none" stroke="#000000" points="809.5,-367 648.5,-367 "/>
+<polyline fill="none" stroke="#000000" points="809.5,-367 809.5,-335 "/>
+<polyline fill="none" stroke="#000000" points="809.5,-367 813.5,-371 "/>
+<text text-anchor="middle" x="731" y="-349.3" font-family="Times,serif" font-size="14.00" fill="#000000">runbundles.&lt;name&gt;</text>
 </g>
 <!-- assemble&#45;&gt;runbundlesX -->
-<g id="edge25" class="edge"><title>assemble&#45;&gt;runbundlesX</title>
-<path fill="none" stroke="black" d="M486.928,-425.84C488.353,-413.158 490.321,-395.64 491.958,-381.077"/>
-<polygon fill="black" stroke="black" points="495.439,-381.436 493.078,-371.107 488.483,-380.654 495.439,-381.436"/>
+<g id="edge30" class="edge">
+<title>assemble&#45;&gt;runbundlesX</title>
+<path fill="none" stroke="#000000" d="M731,-425.5848C731,-412.9209 731,-395.8558 731,-381.4541"/>
+<polygon fill="#000000" stroke="#000000" points="734.5001,-381.0772 731,-371.0773 727.5001,-381.0773 734.5001,-381.0772"/>
 </g>
 <!-- build -->
-<g id="node19" class="node"><title>build</title>
-<polygon fill="lightcyan" stroke="black" points="511,-155 457,-155 457,-119 511,-119 511,-155"/>
-<text text-anchor="middle" x="484" y="-133.3" font-family="Times,serif" font-size="14.00">build</text>
+<g id="node24" class="node">
+<title>build</title>
+<polygon fill="#e0ffff" stroke="#000000" points="973,-155 919,-155 919,-119 973,-119 973,-155"/>
+<text text-anchor="middle" x="946" y="-133.3" font-family="Times,serif" font-size="14.00" fill="#000000">build</text>
 </g>
 <!-- assemble&#45;&gt;build -->
-<g id="edge11" class="edge"><title>assemble&#45;&gt;build</title>
-<path fill="none" stroke="black" d="M518.356,-443.714C565.516,-442.688 650.35,-432.916 690,-379 722.65,-334.602 717.724,-302.63 690,-255 653.588,-192.444 569.89,-160.604 521.124,-146.812"/>
-<polygon fill="black" stroke="black" points="521.846,-143.381 511.278,-144.138 520.011,-150.136 521.846,-143.381"/>
+<g id="edge11" class="edge">
+<title>assemble&#45;&gt;build</title>
+<path fill="none" stroke="#000000" d="M772.5225,-443.2109C913.7049,-440.1041 1368.8587,-426.4551 1412,-379 1449.0719,-338.2212 1445.8503,-298.4902 1412,-255 1358.6548,-186.4631 1084.0214,-151.3715 983.1869,-140.645"/>
+<polygon fill="#000000" stroke="#000000" points="983.4614,-137.1547 973.152,-139.5974 982.7345,-144.1169 983.4614,-137.1547"/>
 </g>
 <!-- findbugsMain -->
-<g id="node22" class="node"><title>findbugsMain</title>
-<polygon fill="orange" stroke="black" points="254.25,-299 161.75,-299 161.75,-263 254.25,-263 254.25,-299"/>
-<text text-anchor="middle" x="208" y="-277.3" font-family="Times,serif" font-size="14.00">findbugsMain</text>
+<g id="node27" class="node">
+<title>findbugsMain</title>
+<polygon fill="#ffa500" stroke="#000000" points="299.5,-299 184.5,-299 184.5,-263 299.5,-263 299.5,-299"/>
+<text text-anchor="middle" x="242" y="-277.3" font-family="Times,serif" font-size="14.00" fill="#000000">findbugsMain</text>
 </g>
 <!-- assemble&#45;&gt;findbugsMain -->
-<g id="edge31" class="edge"><title>assemble&#45;&gt;findbugsMain</title>
-<path fill="none" stroke="black" d="M477.085,-425.991C469.941,-412.8 458.082,-395.395 442,-387 407.883,-369.191 302.248,-398.383 269,-379 242.652,-363.639 225.984,-331.887 216.852,-308.886"/>
-<polygon fill="black" stroke="black" points="220.062,-307.476 213.286,-299.331 213.504,-309.924 220.062,-307.476"/>
+<g id="edge36" class="edge">
+<title>assemble&#45;&gt;findbugsMain</title>
+<path fill="none" stroke="#000000" d="M720.3964,-425.7249C711.5006,-412.3292 697.4575,-395.1213 680,-387 653.0894,-374.4811 441.5633,-387.0646 413,-379 359.9488,-364.0214 305.9475,-329.0841 273.2019,-305.2405"/>
+<polygon fill="#000000" stroke="#000000" points="275.0696,-302.2686 264.9484,-299.1363 270.9072,-307.8966 275.0696,-302.2686"/>
+</g>
+<!-- testOSGi&#45;&gt;check -->
+<g id="edge13" class="edge">
+<title>testOSGi&#45;&gt;check</title>
+<path fill="none" stroke="#000000" d="M381.6633,-262.8314C377.5757,-254.8771 372.6896,-245.369 368.1691,-236.5723"/>
+<polygon fill="#000000" stroke="#000000" points="371.1461,-234.7078 363.4624,-227.4133 364.9201,-237.9074 371.1461,-234.7078"/>
 </g>
 <!-- checkNeeded -->
-<g id="node12" class="node"><title>checkNeeded</title>
-<polygon fill="cyan" stroke="black" points="244.25,-155 155.75,-155 155.75,-119 244.25,-119 244.25,-155"/>
-<text text-anchor="middle" x="200" y="-133.3" font-family="Times,serif" font-size="14.00">checkNeeded</text>
+<g id="node13" class="node">
+<title>checkNeeded</title>
+<polygon fill="#00ffff" stroke="#000000" points="439.5,-155 324.5,-155 324.5,-119 439.5,-119 439.5,-155"/>
+<text text-anchor="middle" x="382" y="-133.3" font-family="Times,serif" font-size="14.00" fill="#000000">checkNeeded</text>
 </g>
 <!-- check&#45;&gt;checkNeeded -->
-<g id="edge14" class="edge"><title>check&#45;&gt;checkNeeded</title>
-<path fill="none" stroke="black" d="M200,-190.697C200,-182.983 200,-173.712 200,-165.112"/>
-<polygon fill="black" stroke="black" points="203.5,-165.104 200,-155.104 196.5,-165.104 203.5,-165.104"/>
+<g id="edge15" class="edge">
+<title>check&#45;&gt;checkNeeded</title>
+<path fill="none" stroke="#000000" d="M361.0656,-190.8314C364.126,-182.9617 367.7779,-173.5712 371.1682,-164.8533"/>
+<polygon fill="#000000" stroke="#000000" points="374.4768,-166.0019 374.8393,-155.4133 367.9527,-163.4647 374.4768,-166.0019"/>
 </g>
 <!-- check&#45;&gt;build -->
-<g id="edge16" class="edge"><title>check&#45;&gt;build</title>
-<path fill="none" stroke="black" d="M227.231,-201.288C278.44,-188.666 389.129,-161.384 447.019,-147.115"/>
-<polygon fill="black" stroke="black" points="447.98,-150.483 456.851,-144.692 446.304,-143.687 447.98,-150.483"/>
+<g id="edge17" class="edge">
+<title>check&#45;&gt;build</title>
+<path fill="none" stroke="#000000" d="M383.7631,-205.3802C482.5831,-193.3615 799.6917,-154.7942 908.7477,-141.5307"/>
+<polygon fill="#000000" stroke="#000000" points="909.4302,-144.9736 918.9345,-140.2918 908.585,-138.0248 909.4302,-144.9736"/>
 </g>
 <!-- check&#45;&gt;jacocoTestReport -->
-<g id="edge36" class="edge"><title>check&#45;&gt;jacocoTestReport</title>
-<path fill="none" stroke="magenta" d="M172.702,-192.465C156.037,-182.98 134.459,-170.7 116.011,-160.201"/>
-<polygon fill="magenta" stroke="magenta" points="117.664,-157.115 107.242,-155.211 114.202,-163.199 117.664,-157.115"/>
+<g id="edge41" class="edge">
+<title>check&#45;&gt;jacocoTestReport</title>
+<path fill="none" stroke="#ff00ff" d="M324.4671,-193.0089C322.9667,-192.3087 321.4719,-191.6348 320,-191 291.504,-178.7112 259.2145,-167.3054 231.2134,-158.173"/>
+<polygon fill="#ff00ff" stroke="#ff00ff" points="232.0928,-154.7791 221.5012,-155.0398 229.9437,-161.4411 232.0928,-154.7791"/>
 </g>
 <!-- checkNeeded&#45;&gt;checkNeeded -->
-<g id="edge15" class="edge"><title>checkNeeded&#45;&gt;checkNeeded</title>
-<path fill="none" stroke="red" d="M244.306,-150.203C254.507,-149.065 262,-144.664 262,-137 262,-132.09 258.925,-128.52 254.032,-126.288"/>
-<polygon fill="red" stroke="red" points="254.862,-122.888 244.306,-123.797 253.125,-129.669 254.862,-122.888"/>
+<g id="edge16" class="edge">
+<title>checkNeeded&#45;&gt;checkNeeded</title>
+<path fill="none" stroke="#ff0000" d="M439.6071,-149.7584C450.1239,-148.1434 457.5,-143.8906 457.5,-137 457.5,-132.5857 454.4728,-129.2539 449.5321,-127.0048"/>
+<polygon fill="#ff0000" stroke="#ff0000" points="450.1795,-123.552 439.6071,-124.2416 448.302,-130.2955 450.1795,-123.552"/>
 </g>
 <!-- releaseNeeded -->
-<g id="node14" class="node"><title>releaseNeeded</title>
-<polygon fill="cyan" stroke="black" points="388.25,-299 293.75,-299 293.75,-263 388.25,-263 388.25,-299"/>
-<text text-anchor="middle" x="341" y="-277.3" font-family="Times,serif" font-size="14.00">releaseNeeded</text>
+<g id="node15" class="node">
+<title>releaseNeeded</title>
+<polygon fill="#00ffff" stroke="#000000" points="606,-299 482,-299 482,-263 606,-263 606,-299"/>
+<text text-anchor="middle" x="544" y="-277.3" font-family="Times,serif" font-size="14.00" fill="#000000">releaseNeeded</text>
 </g>
 <!-- release&#45;&gt;releaseNeeded -->
-<g id="edge27" class="edge"><title>release&#45;&gt;releaseNeeded</title>
-<path fill="none" stroke="black" d="M355.303,-334.697C353.187,-326.898 350.638,-317.509 348.282,-308.829"/>
-<polygon fill="black" stroke="black" points="351.64,-307.838 345.643,-299.104 344.884,-309.672 351.64,-307.838"/>
+<g id="edge32" class="edge">
+<title>release&#45;&gt;releaseNeeded</title>
+<path fill="none" stroke="#000000" d="M561.1961,-334.8314C558.7092,-327.0463 555.7469,-317.7729 552.9875,-309.1347"/>
+<polygon fill="#000000" stroke="#000000" points="556.2591,-307.874 549.882,-299.4133 549.591,-310.0041 556.2591,-307.874"/>
 </g>
 <!-- releaseNeeded&#45;&gt;releaseNeeded -->
-<g id="edge28" class="edge"><title>releaseNeeded&#45;&gt;releaseNeeded</title>
-<path fill="none" stroke="red" d="M388.326,-294.101C398.571,-292.82 406,-288.453 406,-281 406,-276.225 402.951,-272.717 398.066,-270.476"/>
-<polygon fill="red" stroke="red" points="398.889,-267.073 388.326,-267.899 397.098,-273.84 398.889,-267.073"/>
+<g id="edge33" class="edge">
+<title>releaseNeeded&#45;&gt;releaseNeeded</title>
+<path fill="none" stroke="#ff0000" d="M606.0546,-293.6027C616.6554,-291.8806 624,-287.6797 624,-281 624,-276.7208 620.9858,-273.4589 616.0322,-271.2144"/>
+<polygon fill="#ff0000" stroke="#ff0000" points="616.6294,-267.7462 606.0546,-268.3973 614.7273,-274.4829 616.6294,-267.7462"/>
+</g>
+<!-- resolve -->
+<g id="node19" class="node">
+<title>resolve</title>
+<polygon fill="#00ffff" stroke="#000000" points="1083,-299 1015,-299 1015,-263 1083,-263 1083,-299"/>
+<text text-anchor="middle" x="1049" y="-277.3" font-family="Times,serif" font-size="14.00" fill="#000000">resolve</text>
+</g>
+<!-- resolveX&#45;&gt;resolve -->
+<g id="edge27" class="edge">
+<title>resolveX&#45;&gt;resolve</title>
+<path fill="none" stroke="#000000" d="M1049,-334.8314C1049,-327.131 1049,-317.9743 1049,-309.4166"/>
+<polygon fill="#000000" stroke="#000000" points="1052.5001,-309.4132 1049,-299.4133 1045.5001,-309.4133 1052.5001,-309.4132"/>
 </g>
 <!-- export -->
-<g id="node16" class="node"><title>export</title>
-<polygon fill="cyan" stroke="black" points="654,-299 600,-299 600,-263 654,-263 654,-299"/>
-<text text-anchor="middle" x="627" y="-277.3" font-family="Times,serif" font-size="14.00">export</text>
+<g id="node21" class="node">
+<title>export</title>
+<polygon fill="#00ffff" stroke="#000000" points="928.5,-299 865.5,-299 865.5,-263 928.5,-263 928.5,-299"/>
+<text text-anchor="middle" x="897" y="-277.3" font-family="Times,serif" font-size="14.00" fill="#000000">export</text>
 </g>
 <!-- exportX&#45;&gt;export -->
-<g id="edge24" class="edge"><title>exportX&#45;&gt;export</title>
-<path fill="none" stroke="black" d="M627,-334.697C627,-326.983 627,-317.712 627,-309.112"/>
-<polygon fill="black" stroke="black" points="630.5,-309.104 627,-299.104 623.5,-309.104 630.5,-309.104"/>
+<g id="edge25" class="edge">
+<title>exportX&#45;&gt;export</title>
+<path fill="none" stroke="#000000" d="M897,-334.8314C897,-327.131 897,-317.9743 897,-309.4166"/>
+<polygon fill="#000000" stroke="#000000" points="900.5001,-309.4132 897,-299.4133 893.5001,-309.4133 900.5001,-309.4132"/>
 </g>
 <!-- runbundles -->
-<g id="node18" class="node"><title>runbundles</title>
-<polygon fill="cyan" stroke="black" points="533.25,-299 456.75,-299 456.75,-263 533.25,-263 533.25,-299"/>
-<text text-anchor="middle" x="495" y="-277.3" font-family="Times,serif" font-size="14.00">runbundles</text>
+<g id="node23" class="node">
+<title>runbundles</title>
+<polygon fill="#00ffff" stroke="#000000" points="780,-299 682,-299 682,-263 780,-263 780,-299"/>
+<text text-anchor="middle" x="731" y="-277.3" font-family="Times,serif" font-size="14.00" fill="#000000">runbundles</text>
 </g>
 <!-- runbundlesX&#45;&gt;runbundles -->
-<g id="edge26" class="edge"><title>runbundlesX&#45;&gt;runbundles</title>
-<path fill="none" stroke="black" d="M495,-334.697C495,-326.983 495,-317.712 495,-309.112"/>
-<polygon fill="black" stroke="black" points="498.5,-309.104 495,-299.104 491.5,-309.104 498.5,-309.104"/>
+<g id="edge31" class="edge">
+<title>runbundlesX&#45;&gt;runbundles</title>
+<path fill="none" stroke="#000000" d="M731,-334.8314C731,-327.131 731,-317.9743 731,-309.4166"/>
+<polygon fill="#000000" stroke="#000000" points="734.5001,-309.4132 731,-299.4133 727.5001,-309.4133 734.5001,-309.4132"/>
 </g>
 <!-- buildDependents -->
-<g id="node20" class="node"><title>buildDependents</title>
-<polygon fill="lightcyan" stroke="black" points="472,-83 364,-83 364,-47 472,-47 472,-83"/>
-<text text-anchor="middle" x="418" y="-61.3" font-family="Times,serif" font-size="14.00">buildDependents</text>
+<g id="node25" class="node">
+<title>buildDependents</title>
+<polygon fill="#e0ffff" stroke="#000000" points="935,-83 797,-83 797,-47 935,-47 935,-83"/>
+<text text-anchor="middle" x="866" y="-61.3" font-family="Times,serif" font-size="14.00" fill="#000000">buildDependents</text>
 </g>
 <!-- build&#45;&gt;buildDependents -->
-<g id="edge17" class="edge"><title>build&#45;&gt;buildDependents</title>
-<path fill="none" stroke="black" d="M467.685,-118.697C459.693,-110.22 449.928,-99.8636 441.178,-90.5826"/>
-<polygon fill="black" stroke="black" points="443.534,-87.9792 434.127,-83.1043 438.441,-92.7813 443.534,-87.9792"/>
+<g id="edge18" class="edge">
+<title>build&#45;&gt;buildDependents</title>
+<path fill="none" stroke="#000000" d="M925.8126,-118.8314C916.1486,-110.1337 904.4204,-99.5783 893.9184,-90.1265"/>
+<polygon fill="#000000" stroke="#000000" points="895.9553,-87.251 886.1809,-83.1628 891.2725,-92.454 895.9553,-87.251"/>
 </g>
 <!-- buildNeeded -->
-<g id="node21" class="node"><title>buildNeeded</title>
-<polygon fill="lightcyan" stroke="black" points="594,-83 508,-83 508,-47 594,-47 594,-83"/>
-<text text-anchor="middle" x="551" y="-61.3" font-family="Times,serif" font-size="14.00">buildNeeded</text>
+<g id="node26" class="node">
+<title>buildNeeded</title>
+<polygon fill="#e0ffff" stroke="#000000" points="1079,-83 971,-83 971,-47 1079,-47 1079,-83"/>
+<text text-anchor="middle" x="1025" y="-61.3" font-family="Times,serif" font-size="14.00" fill="#000000">buildNeeded</text>
 </g>
 <!-- build&#45;&gt;buildNeeded -->
-<g id="edge19" class="edge"><title>build&#45;&gt;buildNeeded</title>
-<path fill="none" stroke="black" d="M500.562,-118.697C508.675,-110.22 518.588,-99.8636 527.471,-90.5826"/>
-<polygon fill="black" stroke="black" points="530.243,-92.7486 534.629,-83.1043 525.186,-87.9084 530.243,-92.7486"/>
+<g id="edge20" class="edge">
+<title>build&#45;&gt;buildNeeded</title>
+<path fill="none" stroke="#000000" d="M965.935,-118.8314C975.4783,-110.1337 987.0599,-99.5783 997.4306,-90.1265"/>
+<polygon fill="#000000" stroke="#000000" points="1000.038,-92.4857 1005.0713,-83.1628 995.3228,-87.3121 1000.038,-92.4857"/>
 </g>
 <!-- buildDependents&#45;&gt;buildDependents -->
-<g id="edge18" class="edge"><title>buildDependents&#45;&gt;buildDependents</title>
-<path fill="none" stroke="yellow" d="M472.007,-77.8993C482.529,-76.4013 490,-72.1016 490,-65 490,-60.4506 486.934,-57.051 481.964,-54.8012"/>
-<polygon fill="yellow" stroke="yellow" points="482.575,-51.3406 472.007,-52.1007 480.742,-58.0965 482.575,-51.3406"/>
+<g id="edge19" class="edge">
+<title>buildDependents&#45;&gt;buildDependents</title>
+<path fill="none" stroke="#ffff00" d="M935.2746,-77.3102C945.8314,-75.4315 953,-71.3281 953,-65 953,-60.946 950.058,-57.8051 945.1679,-55.5772"/>
+<polygon fill="#ffff00" stroke="#ffff00" points="945.8547,-52.1317 935.2746,-52.6898 943.8935,-58.8514 945.8547,-52.1317"/>
 </g>
 <!-- buildNeeded&#45;&gt;buildNeeded -->
-<g id="edge20" class="edge"><title>buildNeeded&#45;&gt;buildNeeded</title>
-<path fill="none" stroke="red" d="M594.036,-78.2619C604.355,-77.2253 612,-72.8047 612,-65 612,-60.0001 608.862,-56.3891 603.894,-54.1668"/>
-<polygon fill="red" stroke="red" points="604.583,-50.7319 594.036,-51.7381 602.909,-57.5287 604.583,-50.7319"/>
+<g id="edge21" class="edge">
+<title>buildNeeded&#45;&gt;buildNeeded</title>
+<path fill="none" stroke="#ff0000" d="M1079.0073,-77.8993C1089.5286,-76.4013 1097,-72.1016 1097,-65 1097,-60.4506 1093.9337,-57.051 1088.9636,-54.8012"/>
+<polygon fill="#ff0000" stroke="#ff0000" points="1089.5748,-51.3406 1079.0073,-52.1007 1087.7423,-58.0965 1089.5748,-51.3406"/>
 </g>
 <!-- findbugsMain&#45;&gt;check -->
-<g id="edge33" class="edge"><title>findbugsMain&#45;&gt;check</title>
-<path fill="none" stroke="green" d="M206.022,-262.697C205.141,-254.983 204.081,-245.712 203.099,-237.112"/>
-<polygon fill="green" stroke="green" points="206.568,-236.642 201.955,-227.104 199.613,-237.437 206.568,-236.642"/>
+<g id="edge38" class="edge">
+<title>findbugsMain&#45;&gt;check</title>
+<path fill="none" stroke="#00ff00" d="M270.2623,-262.8314C284.4552,-253.7074 301.8282,-242.539 317.0636,-232.7449"/>
+<polygon fill="#00ff00" stroke="#00ff00" points="319.2276,-235.5146 325.7467,-227.1628 315.4422,-229.6263 319.2276,-235.5146"/>
 </g>
 <!-- findbugsTest&#45;&gt;check -->
-<g id="edge34" class="edge"><title>findbugsTest&#45;&gt;check</title>
-<path fill="none" stroke="green" d="M127.628,-262.882C140.418,-254.729 155.694,-244.667 169,-235 169.734,-234.467 170.475,-233.922 171.219,-233.369"/>
-<polygon fill="green" stroke="green" points="173.409,-236.1 179.212,-227.236 169.148,-230.546 173.409,-236.1"/>
+<g id="edge39" class="edge">
+<title>findbugsTest&#45;&gt;check</title>
+<path fill="none" stroke="#00ff00" d="M152.2365,-262.8789C159.7219,-259.9837 167.5263,-257.2166 175,-255 234.7303,-237.285 255.9378,-247.6288 314.4594,-228.6982"/>
+<polygon fill="#00ff00" stroke="#00ff00" points="315.8379,-231.9266 324.1838,-225.3999 313.5894,-225.2975 315.8379,-231.9266"/>
 </g>
 <!-- javadoc -->
-<g id="node24" class="node"><title>javadoc</title>
-<polygon fill="orange" stroke="black" points="582.25,-697 523.75,-697 523.75,-661 582.25,-661 582.25,-697"/>
-<text text-anchor="middle" x="553" y="-675.3" font-family="Times,serif" font-size="14.00">javadoc</text>
+<g id="node29" class="node">
+<title>javadoc</title>
+<polygon fill="#ffa500" stroke="#000000" points="1070.5,-697 999.5,-697 999.5,-661 1070.5,-661 1070.5,-697"/>
+<text text-anchor="middle" x="1035" y="-675.3" font-family="Times,serif" font-size="14.00" fill="#000000">javadoc</text>
 </g>
 <!-- clean -->
-<g id="node25" class="node"><title>clean</title>
-<polygon fill="cyan" stroke="black" points="681,-697 627,-697 627,-661 681,-661 681,-697"/>
-<text text-anchor="middle" x="654" y="-675.3" font-family="Times,serif" font-size="14.00">clean</text>
+<g id="node30" class="node">
+<title>clean</title>
+<polygon fill="#00ffff" stroke="#000000" points="1396.5,-697 1341.5,-697 1341.5,-661 1396.5,-661 1396.5,-697"/>
+<text text-anchor="middle" x="1369" y="-675.3" font-family="Times,serif" font-size="14.00" fill="#000000">clean</text>
 </g>
 <!-- cleanNeeded -->
-<g id="node26" class="node"><title>cleanNeeded</title>
-<polygon fill="cyan" stroke="black" points="680,-606 594,-606 594,-570 680,-570 680,-606"/>
-<text text-anchor="middle" x="637" y="-584.3" font-family="Times,serif" font-size="14.00">cleanNeeded</text>
+<g id="node31" class="node">
+<title>cleanNeeded</title>
+<polygon fill="#00ffff" stroke="#000000" points="1402,-606 1292,-606 1292,-570 1402,-570 1402,-606"/>
+<text text-anchor="middle" x="1347" y="-584.3" font-family="Times,serif" font-size="14.00" fill="#000000">cleanNeeded</text>
 </g>
 <!-- clean&#45;&gt;cleanNeeded -->
-<g id="edge29" class="edge"><title>clean&#45;&gt;cleanNeeded</title>
-<path fill="none" stroke="black" d="M650.722,-660.84C648.3,-648.158 644.954,-630.64 642.172,-616.077"/>
-<polygon fill="black" stroke="black" points="645.582,-615.273 640.268,-606.107 638.706,-616.587 645.582,-615.273"/>
+<g id="edge34" class="edge">
+<title>clean&#45;&gt;cleanNeeded</title>
+<path fill="none" stroke="#000000" d="M1364.548,-660.5848C1361.4564,-647.7967 1357.2797,-630.5207 1353.7768,-616.0313"/>
+<polygon fill="#000000" stroke="#000000" points="1357.1223,-614.9748 1351.3703,-606.0773 1350.3183,-616.6197 1357.1223,-614.9748"/>
 </g>
 <!-- cleanAll -->
-<g id="node31" class="node"><title>cleanAll</title>
-<polygon fill="orange" stroke="black" points="800,-606 746,-606 746,-570 800,-570 800,-606"/>
-<text text-anchor="middle" x="773" y="-584.3" font-family="Times,serif" font-size="14.00">clean</text>
+<g id="node35" class="node">
+<title>cleanAll</title>
+<polygon fill="#ffa500" stroke="#000000" points="1534.5,-606 1479.5,-606 1479.5,-570 1534.5,-570 1534.5,-606"/>
+<text text-anchor="middle" x="1507" y="-584.3" font-family="Times,serif" font-size="14.00" fill="#000000">clean</text>
 </g>
 <!-- clean&#45;&gt;cleanAll -->
-<g id="edge37" class="edge"><title>clean&#45;&gt;cleanAll</title>
-<path fill="none" stroke="blue" d="M676.944,-660.84C695.465,-646.988 721.7,-627.367 742.074,-612.129"/>
-<polygon fill="blue" stroke="blue" points="744.214,-614.9 750.126,-606.107 740.022,-609.294 744.214,-614.9"/>
+<g id="edge42" class="edge">
+<title>clean&#45;&gt;cleanAll</title>
+<path fill="none" stroke="#0000ff" d="M1396.5947,-660.8035C1417.9369,-646.73 1447.6657,-627.1262 1470.8982,-611.8063"/>
+<polygon fill="#0000ff" stroke="#0000ff" points="1473.0316,-614.592 1479.4531,-606.165 1469.178,-608.7481 1473.0316,-614.592"/>
 </g>
 <!-- cleanNeeded&#45;&gt;cleanNeeded -->
-<g id="edge30" class="edge"><title>cleanNeeded&#45;&gt;cleanNeeded</title>
-<path fill="none" stroke="red" d="M680.036,-601.262C690.355,-600.225 698,-595.805 698,-588 698,-583 694.862,-579.389 689.894,-577.167"/>
-<polygon fill="red" stroke="red" points="690.583,-573.732 680.036,-574.738 688.909,-580.529 690.583,-573.732"/>
+<g id="edge35" class="edge">
+<title>cleanNeeded&#45;&gt;cleanNeeded</title>
+<path fill="none" stroke="#ff0000" d="M1402.0733,-600.854C1412.5741,-599.3159 1420,-595.0313 1420,-588 1420,-583.4956 1416.9524,-580.1184 1412.0011,-577.8684"/>
+<polygon fill="#ff0000" stroke="#ff0000" points="1412.6429,-574.4153 1402.0733,-575.146 1410.7917,-581.166 1412.6429,-574.4153"/>
 </g>
 <!-- cleanAllNeeded -->
-<g id="node32" class="node"><title>cleanAllNeeded</title>
-<polygon fill="orange" stroke="black" points="816,-534 730,-534 730,-498 816,-498 816,-534"/>
-<text text-anchor="middle" x="773" y="-512.3" font-family="Times,serif" font-size="14.00">cleanNeeded</text>
+<g id="node36" class="node">
+<title>cleanAllNeeded</title>
+<polygon fill="#ffa500" stroke="#000000" points="1562,-534 1452,-534 1452,-498 1562,-498 1562,-534"/>
+<text text-anchor="middle" x="1507" y="-512.3" font-family="Times,serif" font-size="14.00" fill="#000000">cleanNeeded</text>
 </g>
 <!-- cleanNeeded&#45;&gt;cleanAllNeeded -->
-<g id="edge38" class="edge"><title>cleanNeeded&#45;&gt;cleanAllNeeded</title>
-<path fill="none" stroke="blue" d="M670.269,-569.876C688.463,-560.512 711.191,-548.814 730.64,-538.803"/>
-<polygon fill="blue" stroke="blue" points="732.313,-541.878 739.603,-534.19 729.11,-535.654 732.313,-541.878"/>
+<g id="edge43" class="edge">
+<title>cleanNeeded&#45;&gt;cleanAllNeeded</title>
+<path fill="none" stroke="#0000ff" d="M1387.3748,-569.8314C1408.6787,-560.2446 1434.9983,-548.4008 1457.5211,-538.2655"/>
+<polygon fill="#0000ff" stroke="#0000ff" points="1459.2326,-541.3334 1466.9156,-534.038 1456.3601,-534.95 1459.2326,-541.3334"/>
 </g>
 <!-- echo -->
-<g id="node27" class="node"><title>echo</title>
-<polygon fill="cyan" stroke="black" points="238,-697 184,-697 184,-661 238,-661 238,-697"/>
-<text text-anchor="middle" x="211" y="-675.3" font-family="Times,serif" font-size="14.00">echo</text>
+<g id="node32" class="node">
+<title>echo</title>
+<polygon fill="#00ffff" stroke="#000000" points="359,-697 305,-697 305,-661 359,-661 359,-697"/>
+<text text-anchor="middle" x="332" y="-675.3" font-family="Times,serif" font-size="14.00" fill="#000000">echo</text>
 </g>
 <!-- bndproperties -->
-<g id="node28" class="node"><title>bndproperties</title>
-<polygon fill="cyan" stroke="black" points="142.25,-697 51.75,-697 51.75,-661 142.25,-661 142.25,-697"/>
-<text text-anchor="middle" x="97" y="-675.3" font-family="Times,serif" font-size="14.00">bndproperties</text>
-</g>
-<!-- index -->
-<g id="node30" class="node"><title>index</title>
-<polygon fill="orange" stroke="black" points="996,-606 942,-606 942,-570 996,-570 996,-606"/>
-<text text-anchor="middle" x="969" y="-584.3" font-family="Times,serif" font-size="14.00">index</text>
+<g id="node33" class="node">
+<title>bndproperties</title>
+<polygon fill="#00ffff" stroke="#000000" points="181,-697 63,-697 63,-661 181,-661 181,-697"/>
+<text text-anchor="middle" x="122" y="-675.3" font-family="Times,serif" font-size="14.00" fill="#000000">bndproperties</text>
 </g>
 <!-- cleanAll&#45;&gt;cleanAllNeeded -->
-<g id="edge39" class="edge"><title>cleanAll&#45;&gt;cleanAllNeeded</title>
-<path fill="none" stroke="black" d="M773,-569.697C773,-561.983 773,-552.712 773,-544.112"/>
-<polygon fill="black" stroke="black" points="776.5,-544.104 773,-534.104 769.5,-544.104 776.5,-544.104"/>
+<g id="edge44" class="edge">
+<title>cleanAll&#45;&gt;cleanAllNeeded</title>
+<path fill="none" stroke="#000000" d="M1507,-569.8314C1507,-562.131 1507,-552.9743 1507,-544.4166"/>
+<polygon fill="#000000" stroke="#000000" points="1510.5001,-544.4132 1507,-534.4133 1503.5001,-544.4133 1510.5001,-544.4132"/>
 </g>
 <!-- distclean -->
-<g id="node33" class="node"><title>distclean</title>
-<polygon fill="orange" stroke="black" points="917.25,-534 852.75,-534 852.75,-498 917.25,-498 917.25,-534"/>
-<text text-anchor="middle" x="885" y="-512.3" font-family="Times,serif" font-size="14.00">distclean</text>
+<g id="node37" class="node">
+<title>distclean</title>
+<polygon fill="#ffa500" stroke="#000000" points="1680,-534 1598,-534 1598,-498 1680,-498 1680,-534"/>
+<text text-anchor="middle" x="1639" y="-512.3" font-family="Times,serif" font-size="14.00" fill="#000000">distclean</text>
 </g>
 <!-- cleanAll&#45;&gt;distclean -->
-<g id="edge40" class="edge"><title>cleanAll&#45;&gt;distclean</title>
-<path fill="none" stroke="black" d="M800.112,-570.055C814.861,-560.837 833.29,-549.319 849.206,-539.371"/>
-<polygon fill="black" stroke="black" points="851.124,-542.3 857.749,-534.032 847.414,-536.364 851.124,-542.3"/>
+<g id="edge45" class="edge">
+<title>cleanAll&#45;&gt;distclean</title>
+<path fill="none" stroke="#000000" d="M1534.6715,-572.9064C1552.7154,-563.0643 1576.6085,-550.0317 1596.976,-538.9222"/>
+<polygon fill="#000000" stroke="#000000" points="1598.6531,-541.9943 1605.7561,-534.133 1595.3011,-535.849 1598.6531,-541.9943"/>
 </g>
 <!-- cleanAllNeeded&#45;&gt;cleanAllNeeded -->
-<g id="edge41" class="edge"><title>cleanAllNeeded&#45;&gt;cleanAllNeeded</title>
-<path fill="none" stroke="red" d="M816.036,-529.262C826.355,-528.225 834,-523.805 834,-516 834,-511 830.862,-507.389 825.894,-505.167"/>
-<polygon fill="red" stroke="red" points="826.583,-501.732 816.036,-502.738 824.909,-508.529 826.583,-501.732"/>
+<g id="edge46" class="edge">
+<title>cleanAllNeeded&#45;&gt;cleanAllNeeded</title>
+<path fill="none" stroke="#ff0000" d="M1562.0733,-528.854C1572.5741,-527.3159 1580,-523.0313 1580,-516 1580,-511.4956 1576.9524,-508.1184 1572.0011,-505.8684"/>
+<polygon fill="#ff0000" stroke="#ff0000" points="1572.6429,-502.4153 1562.0733,-503.146 1570.7917,-509.166 1572.6429,-502.4153"/>
 </g>
 <!-- distcleanNeeded -->
-<g id="node34" class="node"><title>distcleanNeeded</title>
-<polygon fill="orange" stroke="black" points="868,-462 762,-462 762,-426 868,-426 868,-462"/>
-<text text-anchor="middle" x="815" y="-440.3" font-family="Times,serif" font-size="14.00">distcleanNeeded</text>
+<g id="node38" class="node">
+<title>distcleanNeeded</title>
+<polygon fill="#ffa500" stroke="#000000" points="1625.5,-462 1488.5,-462 1488.5,-426 1625.5,-426 1625.5,-462"/>
+<text text-anchor="middle" x="1557" y="-440.3" font-family="Times,serif" font-size="14.00" fill="#000000">distcleanNeeded</text>
 </g>
 <!-- cleanAllNeeded&#45;&gt;distcleanNeeded -->
-<g id="edge42" class="edge"><title>cleanAllNeeded&#45;&gt;distcleanNeeded</title>
-<path fill="none" stroke="black" d="M783.382,-497.697C788.265,-489.559 794.187,-479.689 799.579,-470.701"/>
-<polygon fill="black" stroke="black" points="802.594,-472.48 804.737,-462.104 796.591,-468.879 802.594,-472.48"/>
+<g id="edge47" class="edge">
+<title>cleanAllNeeded&#45;&gt;distcleanNeeded</title>
+<path fill="none" stroke="#000000" d="M1519.6171,-497.8314C1525.3172,-489.6232 1532.1663,-479.7606 1538.4359,-470.7323"/>
+<polygon fill="#000000" stroke="#000000" points="1541.3838,-472.6234 1544.213,-462.4133 1535.6342,-468.6306 1541.3838,-472.6234"/>
 </g>
 <!-- distclean&#45;&gt;distcleanNeeded -->
-<g id="edge43" class="edge"><title>distclean&#45;&gt;distcleanNeeded</title>
-<path fill="none" stroke="black" d="M867.697,-497.697C859.135,-489.135 848.656,-478.656 839.304,-469.304"/>
-<polygon fill="black" stroke="black" points="841.65,-466.701 832.104,-462.104 836.701,-471.65 841.65,-466.701"/>
+<g id="edge48" class="edge">
+<title>distclean&#45;&gt;distcleanNeeded</title>
+<path fill="none" stroke="#000000" d="M1618.3079,-497.8314C1608.3052,-489.0485 1596.145,-478.3712 1585.3001,-468.8489"/>
+<polygon fill="#000000" stroke="#000000" points="1587.5092,-466.1308 1577.6854,-462.1628 1582.8906,-471.3909 1587.5092,-466.1308"/>
 </g>
 <!-- distcleanNeeded&#45;&gt;distcleanNeeded -->
-<g id="edge44" class="edge"><title>distcleanNeeded&#45;&gt;distcleanNeeded</title>
-<path fill="none" stroke="red" d="M868.257,-456.899C878.632,-455.401 886,-451.102 886,-444 886,-439.451 882.976,-436.051 878.075,-433.801"/>
-<polygon fill="red" stroke="red" points="878.827,-430.378 868.257,-431.101 876.971,-437.128 878.827,-430.378"/>
+<g id="edge49" class="edge">
+<title>distcleanNeeded&#45;&gt;distcleanNeeded</title>
+<path fill="none" stroke="#ff0000" d="M1625.5253,-456.372C1636.2134,-454.5224 1643.5,-450.3984 1643.5,-444 1643.5,-439.801 1640.3619,-436.5816 1635.1838,-434.3416"/>
+<polygon fill="#ff0000" stroke="#ff0000" points="1636.0993,-430.9634 1625.5253,-431.628 1634.2058,-437.7025 1636.0993,-430.9634"/>
 </g>
 <!-- init -->
-<g id="node35" class="node"><title>init</title>
-<polygon fill="lightcyan" stroke="black" points="930,-697 876,-697 876,-661 930,-661 930,-697"/>
-<text text-anchor="middle" x="903" y="-675.3" font-family="Times,serif" font-size="14.00">init</text>
+<g id="node39" class="node">
+<title>init</title>
+<polygon fill="#e0ffff" stroke="#000000" points="1641,-697 1587,-697 1587,-661 1641,-661 1641,-697"/>
+<text text-anchor="middle" x="1614" y="-675.3" font-family="Times,serif" font-size="14.00" fill="#000000">init</text>
 </g>
 <!-- wrapper -->
-<g id="node36" class="node"><title>wrapper</title>
-<polygon fill="orange" stroke="black" points="857.25,-697 796.75,-697 796.75,-661 857.25,-661 857.25,-697"/>
-<text text-anchor="middle" x="827" y="-675.3" font-family="Times,serif" font-size="14.00">wrapper</text>
+<g id="node40" class="node">
+<title>wrapper</title>
+<polygon fill="#ffa500" stroke="#000000" points="1568.5,-697 1491.5,-697 1491.5,-661 1568.5,-661 1568.5,-697"/>
+<text text-anchor="middle" x="1530" y="-675.3" font-family="Times,serif" font-size="14.00" fill="#000000">wrapper</text>
 </g>
 </g>
 </svg>
diff --git a/lib/info.java/cnf/gradle/template/index.gradle b/lib/info.java/cnf/gradle/template/index.gradle
deleted file mode 100644 (file)
index ad67e60..0000000
+++ /dev/null
@@ -1,170 +0,0 @@
-/*
- * WARNING
- *
- * This file should not be edited.
- *
- * GNU LIBRARY GENERAL PUBLIC LICENSE
- * Version 2, June 1991
- *
- * Bundle repository indexing tasks.
- */
-
-
-/*
- * Create repository indexes
- *
- * Syntax:
- * ext.indexDirectories = \
- *   '<root directory>;<name>;<name of fileTree property>, ...'
- *
- *  root directory           : mandatory.
- *  name                     : optional. if not specified then the basename of
- *                             the root directory is used.
- *  name of fileTree variable: optional. if not specified then all *.jar files
- *                             below the root directory will be indexed
- */
-if (!hasProperty('indexDirectories'    )) ext.indexDirectories     = ''
-
-if (!hasProperty('indexOBRUncompressed')) ext.indexOBRUncompressed = false
-if (!hasProperty('indexOBRCompressed'  )) ext.indexOBRCompressed   = false
-if (!hasProperty('indexR5Uncompressed' )) ext.indexR5Uncompressed  = false
-if (!hasProperty('indexR5Compressed'   )) ext.indexR5Compressed    = true
-
-
-ext.indexBindexJar     = "${rootDir}/${bnd_cnf}/gradle/gradle/dependencies/org.osgi.impl.bundle.bindex/org.osgi.impl.bundle.bindex-3.0.0.jar"
-ext.indexBindexMain    = 'org.osgi.impl.bundle.bindex.cli.Index'
-ext.indexRepoindexJar  = "${rootDir}/${bnd_cnf}/gradle/dependencies/org.osgi.impl.bundle.repoindex.cli/org.osgi.impl.bundle.repoindex.cli-3.4.0.jar"
-ext.indexRepoindexMain = 'org.osgi.impl.bundle.bindex.cli.Index'
-
-
-void createIndexes(boolean r5, boolean uncompressed, boolean compressed) {
-  def indexerClasspath
-  def indexerMain
-  if (!r5) {
-    indexerClasspath = rootProject.files(rootProject.indexBindexJar )
-    indexerMain      =                   rootProject.indexBindexMain
-  } else {
-    indexerClasspath = rootProject.files(rootProject.indexRepoindexJar )
-    indexerMain      =                   rootProject.indexRepoindexMain
-  }
-
-  indexDirectories.trim().split('\\s*,\\s*').each { indexDirectory ->
-    def parts        = indexDirectory.split('\\s*;\\s*')
-
-    if (parts.length > 3) {
-      throw new GradleException("Too many parts to the indexing configuration (${indexDirectory})")
-    }
-
-    if (parts.length > 1) {
-      if (parts[0].empty) {
-        throw new GradleException("Can't have an empty index directory (${indexDirectory})")
-      }
-      indexDirectory = parts[0]
-    }
-    def indexDirectoryFile = file(indexDirectory)
-
-    def repoName     = indexDirectoryFile.name
-    if (parts.length > 1 && !parts[1].empty) {
-      repoName       = parts[1]
-    }
-
-    indexDirectoryFile.mkdirs()
-
-    def bundlesToIndex
-    if (parts.length > 2) {
-      def treeProperty = parts[2]
-      bundlesToIndex = properties.get(treeProperty)
-      if (bundlesToIndex == null) {
-        throw new GradleException("Property ${treeProperty} not found")
-      }
-      if (!(bundlesToIndex instanceof FileTree)) {
-        throw new GradleException("Property ${treeProperty} is not an instance of FileTree")
-      }
-    } else {
-      bundlesToIndex = fileTree(indexDirectoryFile).include("**/*.jar")
-    }
-
-    def uncompressedIndexFile
-    def compressedIndexFile
-    if (!r5) {
-      uncompressedIndexFile = file("${indexDirectory}/repository.xml")
-      compressedIndexFile   = file("${indexDirectory}/repository.zip")
-    } else {
-      uncompressedIndexFile = file("${indexDirectory}/index.xml")
-      compressedIndexFile   = file("${indexDirectory}/index.xml.gz")
-    }
-
-    if (uncompressedIndexFile.exists()) {
-      uncompressedIndexFile.delete()
-    }
-    if (compressedIndexFile.exists()) {
-      compressedIndexFile.delete()
-    }
-
-    def indexes = [[false, uncompressed], [true, compressed]]
-    indexes.each { indexesEntry ->
-      def compress      = indexesEntry[0]
-      def generateIndex = indexesEntry[1]
-      if (generateIndex) {
-        def indexFile
-        if (!compress) {
-          indexFile     = uncompressedIndexFile
-        } else {
-          indexFile     = compressedIndexFile
-        }
-
-        def indexArgs   = []
-        if (!r5) {
-          indexArgs    += ['-r', indexFile,
-                           '-d', indexDirectoryFile.toURI(),
-                           '-n', repoName]
-        } else {
-          if (!compress) {
-            indexArgs  += ['--pretty']
-          }
-          indexArgs    += ['-r', indexFile,
-                           '-d', indexDirectoryFile,
-                           '-n', repoName]
-        }
-
-        if (!bundlesToIndex.empty) {
-          bundlesToIndex.each {
-            indexArgs  += relativePath(it)
-          }
-        }
-
-        def result = javaexec {
-          classpath     = indexerClasspath
-          main          = indexerMain
-          args          = indexArgs
-        }
-        if (result.exitValue != 0) {
-          String msg = String.format("Could not create %s %s index in directory ${indexDirectory}",
-            compress ? 'a compressed' : 'an uncompressed',
-            r5 ? 'R5' : 'OBR')
-          throw new GradleException(msg)
-        }
-      }
-    }
-  }
-}
-
-
-task index {
-  description 'Generate OBR and R5 repository indexes (set the indexDirectories property)'
-  group 'release'
-  enabled !indexDirectories.isEmpty() &&
-            (   indexOBRUncompressed
-             || indexOBRCompressed
-             || indexR5Uncompressed
-             || indexR5Compressed)
-
-  doLast {
-    if (indexOBRUncompressed || indexOBRCompressed) {
-      createIndexes(false, indexOBRUncompressed, indexOBRCompressed)
-    }
-    if (indexR5Uncompressed  || indexR5Compressed ) {
-      createIndexes(true , indexR5Uncompressed , indexR5Compressed )
-    }
-  }
-}
index 293feb7..ef7f4a4 100644 (file)
@@ -16,7 +16,7 @@ assert(hasProperty('sourceSets'))
 apply plugin: 'jacoco'
 
 
-if (!hasProperty('jacocoToolVersion')) ext.jacocoToolVersion = '0.7.9'
+if (!hasProperty('jacocoToolVersion')) ext.jacocoToolVersion = '0.8.3'
 if (!hasProperty('jacocoXmlReport'  )) ext.jacocoXmlReport   = true
 if (!hasProperty('jacocoCsvReport'  )) ext.jacocoCsvReport   = false
 
index 9bcb12a..5c58340 100644 (file)
@@ -64,9 +64,6 @@ allprojects { project ->
     project.apply from: settingsFile
   }
 
-  /* Add index tasks to the project */
-  project.apply from: rootProject.file("${rootProject.bnd_cnf}/gradle/template/index.gradle")
-
   /* Add clean tasks to the project */
   project.apply from: rootProject.file("${rootProject.bnd_cnf}/gradle/template/clean.gradle")
 
index ea7b40d..66d560a 100644 (file)
@@ -1,5 +1,5 @@
 # bnd_jar can also be a URL.
-bnd_jar=cnf/gradle/dependencies/biz.aQute.bnd.gradle/biz.aQute.bnd.gradle-3.4.0.jar
+bnd_jar=cnf/gradle/dependencies/biz.aQute.bnd.gradle/biz.aQute.bnd.gradle-4.1.0.jar
 
 # Default gradle tasks to build for the root project (comma-separated)
 root_defaultTask=build
@@ -10,6 +10,3 @@ bnd_defaultTask=build
 # Default gradle tasks to build for other projects (comma-separated)
 others_defaultTask=build
 
-# This should be false. It only needs to be true in rare cases.
-bnd_preCompileRefresh=false
-