# generate-domino-update-site
This tool allows the generation of a p2 site from a Domino installation folder, similar to the official [IBM Domino Update Site for Build Management](https://openntf.org/main.nsf/project.xsp?r=project/IBM%20Domino%20Update%20Site%20for%20Build%20Management), as well as the Mavenization of a p2 site generated in that way. This is useful to compile code that targets a newer release of Domino than the one packaged officially.
To use the tool from the command line, either add the OpenNTF Maven repository (https://artifactory.openntf.org/openntf) as a plugin repository to your Maven configuration or install the Maven project
## Requirements
- A Notes/Domino installation accessible on the running computer, or Domino Docker container/image on the local Docker daemon.
- Maven 3+
- Java 8+
## `generateUpdateSite` Mojo
### What It Does
The tool performs several tasks to generate its result:
1. Copies the features and plugins from the `osgi/rcp/eclipe` and `osgi/shared/eclipse` directories, converting unpacked folder artifacts back into Jar files. In `dotsOnly` mode, it copies `osgi-dots/rcp/eclipse` and `osgi-dots/shared/eclipse` directories.
2. If pointed to a Windows Notes installation directory, it will do the same with the `framework` directory, which contains UI-specific plugins
3. Generates `com.ibm.notes.java.api` and `com.ibm.notes.java.api.win32.linux` bundles using Domino's Notes.jar with a version matching today's date, if needed
4. Generates a `com.ibm.xsp.http.bootstrap` bundle in similar fashion, when the JAR is available in the source
5. Downloads source bundles for open-source components found in Eclipse's compatible repository
6. Creates a basic site.xml file
7. Generates artifacts.jar and content.jar files
### Command Line Use
Add the OpenNTF Maven server to your ~/.m2/settings.xml file. For example:
```xml
openntf
artifactory.openntf.org
artifactory.openntf.org
https://artifactory.openntf.org/openntf
openntf
```
Execute the plugin with properties to point to the base of your Domino installation and the target folder. For example:
```sh
$ mvn org.openntf.p2:generate-domino-update-site:6.0.0:generateUpdateSite \
-Dsrc="/Volumes/C/Program Files/IBM/Domino" \
-Ddest="/Users/someuser/Desktop/UpdateSite" \
-DflattenEmbeds=false # optional
-DonlyDots=true # optional
```
- `src` is the location of Domino. On Windows, this might be "C:\Program Files\IBM\Domino". If unspecified, the Mojo will attempt to find a Domino or Notes installation based on common locations
- `dest` is where you want to save it to. For the Extension Library, this was historically "C:\UpdateSite", but it can be anywhere
- `flattenEmbeds` will look for embedded JARs named with Bundle-ClassPath and expand their contents out into the main bundle
- `onlyDots` will generate an update site for DOTS plugins.
Alternatively, Docker container/image can be used to generate update site.
```sh
$ mvn org.openntf.p2:generate-domino-update-site:6.0.0:generateUpdateSite \
-DsrcContainer="domino-container" # Either srcContainer or srcImageId should be used
-DsrcImageId="Domino:latest"
-DdockerDominoDir="/opt/hcl/domino/notes/latest/linux"
-Ddest="/Users/someuser/Desktop/UpdateSite" \
-DflattenEmbeds=false # optional
-DonlyDots=true # optional
```
- `srcContainer` is the container to be used as the source. Will be ignored if an image id provided.
- `srcImageId` is the image id to be used as the source. When given, mojo will create a temporary container with the image and remove when it's done.
- `dockerDominoDir` is the directory to the domino installation inside the container. Default value (`/opt/hcl/domino/notes/latest/linux`) will be used if omitted. Mojo will pull necessary files to a temporary directory.
Note: the `flattenEmbeds` option strips signature files and makes no attempt to merge conflicts between same-named files. Accordingly, the result bundles may not behave the same way as their original versions.
### Programmatic Use
To incorporate the tool into another program, create a new object of class `org.openntf.p2.domino.updatesite.tasks.GenerateUpdateSiteTask` with the same parameters as via the command line and execute its `run` method (or provide it to any executor that can take a `Runnable`).
## `mavenizeBundles` Mojo
### p2-layout-resolver
Though this Mojo still exists in this plugin, you should consider using the [`p2-layout-resolver` plugin](https://github.com/OpenNTF/p2-layout-provider) instead.
### What It Does
This tool processes a p2 site (or a bundles directory directly) and installs the contents into the local Maven repository. It derives its Maven information from the configuration bundle's manifest:
- The `groupId` can be set with the "groupId" parameter, and defaults to "com.ibm.xsp"
- The `artifactId` is the bundle's symbolic name
- The `version` is the bundle version
- The `organization` is the `Bundle-Vendor` value, if present
- The `dependencies` are other created bundles based on the `Require-Bundle` value
Additionally, this installs any embedded JARs as attached entities with the `classifier` matching their base name. For example, Notes.jar from the 9.0.1 release can be accessed like:
```xml
com.ibm.xsp
com.ibm.notes.java.api.win32.linux
[9.0.1,)
Notes
provided
```
### Command Line Use
Execute the plugin with properties to point to the base of your Domino installation and the target folder. For example:
```sh
$ mvn org.openntf.p2:generate-domino-update-site:6.0.0:mavenizeBundles \
-Dsrc="/Users/someuser/Desktop/UpdateSite" \
-DgroupId=some.group.id # Optional
-DoptionalDependencies=false # Optional
-DlocalRepositoryPath=/foo/bar # Optional
```
- `src` is the location of the Update Site
- `groupId` is an optional group ID to use for the installed bundles. It defaults to "com.ibm.xsp"
- `optionalDependencies` sets whether inter-bundle dependencies should be marked as `
true`
- `localRepositoryPath` sets a local repository directory to use instead of the default
## `mavenizeAndDeployBundles` Mojo
This mojo is similar to the `mavenizeBundles` mojo, but deploys the bundles to a remote repository.
### Command Line Usage
It has the same options and behavior as `mavenizeBundles`, with the exception of `localRepositoryPath`. Instead, it requires `deploymentRepository` in the same format as `altDeploymentRepository` in the `maven-install-plugin:deploy` goal. For example:
```sh
$ mvn org.openntf.p2:generate-domino-update-site:6.0.0:mavenizeAndDeployBundles \
-Dsrc="/Users/someuser/Desktop/UpdateSite" \
-DdeploymentRepository=some.repo::default::https://some.repo/path
-DgroupId=some.group.id # Optional
-DoptionalDependencies=false # Optional
```