').text(reason).html();
+}
+
+function showReactError(img, reason) {
+ var message = extractReactError(reason);
+ $(img).parent().parent().html($('
').append(message));
+ $(img).parent().parent().addClass("error");
+}
+
+function handleReactImgError(img) {
+ $.ajax({
+ url: $(img).attr('src'),
+ method: 'GET',
+ success: function(data) {
+ showReactError(img, data);
+ },
+ error: function(r) {
+ showReactError(img, r.responseText);
+ }
+ });
+}
diff --git a/cdkdepict-webapp/src/main/webapp/WEB-INF/static/map.html b/cdkdepict-webapp/src/main/webapp/WEB-INF/static/map.html
new file mode 100644
index 0000000..07f6c37
--- /dev/null
+++ b/cdkdepict-webapp/src/main/webapp/WEB-INF/static/map.html
@@ -0,0 +1,131 @@
+
+
+
+
CDK Map
+
+
+
+
+
+
+
+
+
+

+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/cdkdepict-webapp/src/main/webapp/WEB-INF/static/react.html b/cdkdepict-webapp/src/main/webapp/WEB-INF/static/react.html
new file mode 100644
index 0000000..2688098
--- /dev/null
+++ b/cdkdepict-webapp/src/main/webapp/WEB-INF/static/react.html
@@ -0,0 +1,143 @@
+
+
+
+
CDK React
+
+
+
+
+
+
+
+
+
+

+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/cdkdepict-webapp/src/main/webapp/WEB-INF/web-javaee.xml b/cdkdepict-webapp/src/main/webapp/WEB-INF/web-jakarta.xml
similarity index 86%
rename from cdkdepict-webapp/src/main/webapp/WEB-INF/web-javaee.xml
rename to cdkdepict-webapp/src/main/webapp/WEB-INF/web-jakarta.xml
index 822f14d..7dabb5e 100644
--- a/cdkdepict-webapp/src/main/webapp/WEB-INF/web-javaee.xml
+++ b/cdkdepict-webapp/src/main/webapp/WEB-INF/web-jakarta.xml
@@ -1,9 +1,9 @@
-
+ xmlns="https://jakarta.ee/xml/ns/jakartaee"
+ xsi:schemaLocation="https://jakarta.ee/xml/ns/jakartaee https://jakarta.ee/xml/ns/jakartaee/web-app_6_0.xsd"
+ version="6.0">
+
cdkdepict
org.springframework.web.servlet.DispatcherServlet
diff --git a/cdkdepict-webapp/src/main/webapp/WEB-INF/web.xml b/cdkdepict-webapp/src/main/webapp/WEB-INF/web.xml
index f03ddf4..822f14d 100644
--- a/cdkdepict-webapp/src/main/webapp/WEB-INF/web.xml
+++ b/cdkdepict-webapp/src/main/webapp/WEB-INF/web.xml
@@ -1,10 +1,9 @@
-
+ xmlns="http://xmlns.jcp.org/xml/ns/javaee"
+ xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
+ version="4.0">
+
cdkdepict
org.springframework.web.servlet.DispatcherServlet
diff --git a/docker/Dockerfile b/docker/Dockerfile
index 5642a16..66fda54 100644
--- a/docker/Dockerfile
+++ b/docker/Dockerfile
@@ -1,15 +1,16 @@
-FROM maven:3.9.3-eclipse-temurin-17-alpine as builder
+FROM maven:3.5-jdk-8-alpine as builder
WORKDIR /usr/src/app
COPY cdkdepict-lib cdkdepict-lib
COPY cdkdepict-webapp cdkdepict-webapp
COPY pom.xml pom.xml
-RUN mvn clean package -Pbootable
+RUN mvn clean package
-FROM eclipse-temurin:17-jre-alpine as runtime
+FROM eclipse-temurin:8u352-b08-jre-alpine as runtime
# we need a font! DejaVu does fine but we only want the Sans-Serif one
RUN apk add --no-cache libgcc && \
rm /usr/share/fonts/dejavu/DejaVuSerif* \
+ /usr/share/fonts/dejavu/DejaVuLGC* \
/usr/share/fonts/dejavu/DejaVuSansCond* \
/usr/share/fonts/dejavu/DejaVuSansMono* \
/usr/share/fonts/dejavu/DejaVuSans-* \
diff --git a/docker/Dockerfile.javaee b/docker/Dockerfile.jakarta
similarity index 80%
rename from docker/Dockerfile.javaee
rename to docker/Dockerfile.jakarta
index 9118c06..b18a3c7 100644
--- a/docker/Dockerfile.javaee
+++ b/docker/Dockerfile.jakarta
@@ -1,16 +1,15 @@
-FROM maven:3.5-jdk-8-alpine as builder
+FROM maven:3.9.3-eclipse-temurin-17-alpine as builder
WORKDIR /usr/src/app
COPY cdkdepict-lib cdkdepict-lib
COPY cdkdepict-webapp cdkdepict-webapp
COPY pom.xml pom.xml
-RUN mvn clean package -Pjavaee
+RUN mvn clean package -Pbootable,jakarta
-FROM eclipse-temurin:8u352-b08-jre-alpine as runtime
+FROM eclipse-temurin:17-jre-alpine as runtime
# we need a font! DejaVu does fine but we only want the Sans-Serif one
RUN apk add --no-cache libgcc && \
rm /usr/share/fonts/dejavu/DejaVuSerif* \
- /usr/share/fonts/dejavu/DejaVuLGC* \
/usr/share/fonts/dejavu/DejaVuSansCond* \
/usr/share/fonts/dejavu/DejaVuSansMono* \
/usr/share/fonts/dejavu/DejaVuSans-* \
diff --git a/docker/README.md b/docker/README.md
index eadbe0b..ec0e70d 100644
--- a/docker/README.md
+++ b/docker/README.md
@@ -2,20 +2,18 @@
To build the 'cdk/depict' image directly from source (including the MAVEN build).
-There are two different versions, the newer "jakarta" version uses Spring 6 (default) and requires Java 17/TomCat 10 to deploy. The "javaee" uses the older
-APIs and will run on Java 8/TomCat 9 but uses libraries which are no longer
-updated.
+There are two different versions, the newer "jakarta" version uses Spring 6 and requires Java 17/TomCat 10 to deploy.
```
-docker/$ docker build -t cdkdepict -f Dockerfile ..
-docker/$ docker build -t cdkdepict-javaee -f Dockerfile.javaee ..
+docker/$ docker build -t cdkdepict-jsp3 -f Dockerfile ..
+docker/$ docker build -t cdkdepict-jakarta -f Dockerfile.jakarta ..
```
or from the project main directory:
```
$ docker build -t cdkdepict -f docker/Dockerfile .
-$ docker build -t cdkdepict-javaee -f docker/Dockerfile.javaee .
+$ docker build -t cdkdepict-jakarta -f docker/Dockerfile.jakarta .
```
# Run
diff --git a/docs/RDT_CDK_INTEGRATION.md b/docs/RDT_CDK_INTEGRATION.md
new file mode 100644
index 0000000..5db5985
--- /dev/null
+++ b/docs/RDT_CDK_INTEGRATION.md
@@ -0,0 +1,239 @@
+# Integrating RDT (Reaction Decoder Tool) into a CDK application
+
+This note is for developers (or coding agents) who embed **RDT** (`com.bioinceptionlabs:rdt`) in another **Java** app that already uses the **Chemistry Development Kit (CDK)**. It covers atom–atom mapping from **reaction SMILES** and **MDL RXN**, and how to **detect or tag changing bonds** on real `IBond` / `IAtom` objects.
+
+RDT is **deterministic** and does **not** require machine-learning models. It depends on CDK (same major line as declared in RDT’s `pom.xml`, currently **2.12**) and **SMSD** for subgraph / MCS work during mapping.
+
+---
+
+## 1. Add the dependency
+
+**Maven:**
+
+```xml
+
+ com.bioinceptionlabs
+ rdt
+ 4.0.0
+
+```
+
+**Gradle (after `mvn install` to `~/.m2` or a reachable repository):**
+
+```kotlin
+repositories {
+ mavenLocal()
+ mavenCentral()
+}
+dependencies {
+ implementation("com.bioinceptionlabs:rdt:4.0.0")
+}
+```
+
+**Java version:** RDT’s build targets **Java 25** in this repository. Your app should use a compatible JDK, or align toolchains with the RDT artifact you depend on.
+
+**CDK alignment:** Prefer using the **same CDK 2.x line** RDT was built against to avoid subtle classpath conflicts. If you must mix versions, test thoroughly.
+
+---
+
+## 2. Two integration styles
+
+| Style | When to use | You get |
+|--------|-------------|--------|
+| **Facade API** (`RDT.map`) | Quick integration, minimal CDK surface | `ReactionResult`: mapped SMILES, bond-change **strings**, counts, fingerprints, canonical signature |
+| **Full CDK pipeline** (`ReactionMechanismTool`) | You already have `IReaction`, need `IBond`/`IAtom` tagging | `BondChangeCalculator` on the **mapped** reaction, lists of `BondChange`, reaction-center atoms, stereo lists |
+
+Both ultimately run **`ReactionMechanismTool`**; the facade just parses SMILES and packages outputs into `ReactionResult`.
+
+---
+
+## 3. Map reaction SMILES (facade)
+
+```java
+import com.bioinceptionlabs.reactionblast.api.RDT;
+import com.bioinceptionlabs.reactionblast.api.ReactionResult;
+
+ReactionResult result = RDT.map("CC(=O)O.OCC>>CC(=O)OCC.O");
+// Optional: RDT.map(smiles, generate2D, complexMapping); // complex = ring-heavy cases
+
+if (result.isMapped()) {
+ String mapped = result.getMappedSmiles(); // AAM in SMILES
+ int total = result.getTotalBondChanges();
+ // String-level features (good for logs, UI, ML-free similarity)
+ var formedCleaved = result.getFormedCleavedBonds();
+ var orderChanges = result.getOrderChangedBonds();
+ var stereo = result.getStereoChangedBonds();
+ var centre = result.getReactionCentreFingerprint();
+ String signature = result.getReactionSignature(); // canonical R-string-style summary
+ String algo = result.getAlgorithm(); // e.g. RINGS, MIN, MAX, MIXTURE
+}
+```
+
+`ReactionResult` is **immutable** and avoids tying your UI layer to CDK types. Use **`RDT.compare(smiles1, smiles2)`** if you only need a **Tanimoto-style** similarity on bond-change fingerprints.
+
+---
+
+## 4. Map from CDK: reaction SMILES
+
+Use this when you already build or receive `IReaction` (e.g. from your own parsers).
+
+```java
+import org.openscience.cdk.interfaces.IReaction;
+import org.openscience.cdk.silent.SilentChemObjectBuilder;
+import org.openscience.cdk.smiles.SmilesParser;
+import com.bioinceptionlabs.reactionblast.mechanism.ReactionMechanismTool;
+import com.bioinceptionlabs.reactionblast.tools.StandardizeReaction;
+
+SmilesParser sp = new SmilesParser(SilentChemObjectBuilder.getInstance());
+IReaction reaction = sp.parseReactionSmiles("CC>>CC");
+reaction.setID("my_rxn");
+
+ReactionMechanismTool rmt = new ReactionMechanismTool(
+ reaction,
+ true, // forcedMapping: recompute mapping even if present
+ true, // generate2D: perceive stereo for 2D
+ false, // generate3D
+ true, // checkComplex: ring / harder cases (more expensive)
+ false, // accept_no_change: set true for transporter-like “no bond change” cases
+ new StandardizeReaction());
+```
+
+Typical `ReactionMechanismTool` constructor parameters:
+
+- **`forcedMapping`**: `true` = always run RDT mapping; `false` = can **reuse** existing atom–atom mappings on the reaction if they look complete.
+- **`checkComplex`**: `true` = enable strategies tuned for **ring systems** (CLI `-c`); slower but broader coverage.
+- **`accept_no_change`**: `true` = allow solutions with **no bond-order change** (e.g. transport); `false` = chemistry-style mapping only.
+
+If stoichiometry is **unbalanced**, RDT may **skip** mapping unless `forcedMapping` is `true` (see implementation logs / behaviour in `ReactionMechanismTool`).
+
+---
+
+## 5. Map from MDL RXN (V2000)
+
+RDT ships **`MDLRXNV2000Reader`** under `com.bioinceptionlabs.reactionblast.tools.ChemicalFileIO`. Read an RXN file into CDK’s `IReaction`, then pass it to `ReactionMechanismTool` as above.
+
+```java
+import java.io.FileReader;
+import org.openscience.cdk.Reaction;
+import com.bioinceptionlabs.reactionblast.tools.ChemicalFileIO.MDLRXNV2000Reader;
+
+IReaction reaction;
+try (MDLRXNV2000Reader reader = new MDLRXNV2000Reader(new FileReader("reaction.rxn"))) {
+ reaction = reader.read(new Reaction());
+}
+reaction.setId("from_rxn");
+
+ReactionMechanismTool rmt = new ReactionMechanismTool(
+ reaction, true, true, false, true, false, new StandardizeReaction());
+```
+
+Round-tripping via reaction SMILES (as in `ChemicalFormatParser` in this repo) is optional; for integration, feeding **`IReaction` directly** is usually enough.
+
+---
+
+## 6. Detect and tag changing bonds (CDK objects)
+
+After mapping, read the **selected** solution and its **`BondChangeCalculator`**:
+
+```java
+import com.bioinceptionlabs.reactionblast.mechanism.MappingSolution;
+import com.bioinceptionlabs.reactionblast.mechanism.BondChangeCalculator;
+import com.bioinceptionlabs.reactionblast.mechanism.MechanismHelpers.BondChange;
+import org.openscience.cdk.interfaces.IBond;
+import org.openscience.cdk.interfaces.IAtom;
+
+MappingSolution solution = rmt.getSelectedSolution();
+if (solution == null) {
+ // mapping failed or was skipped (e.g. unbalanced reaction with forcedMapping false)
+ return;
+}
+BondChangeCalculator bcc = solution.getBondChangeCalculator();
+```
+
+### 6.1 Per-bond pairing (formed / cleaved / order change)
+
+```java
+for (BondChange bc : bcc.getBondChangeList()) {
+ IBond rBond = bc.getReactantBond(); // null if bond is formed
+ IBond pBond = bc.getProductBond(); // null if bond is cleaved
+ float delta = bc.getBondChangeDelta();
+ // Tag atoms/bonds in your model using rBond / pBond and map numbers from atoms
+}
+```
+
+`BondChange` pairs **reactant-side** and **product-side** `IBond` instances (one side may be `null` for pure formation or cleavage).
+
+### 6.2 Maps keyed by bond (convenience)
+
+`BondChangeCalculator` also exposes categorised maps, for example:
+
+- `getBondFormedProduct()`, `getBondCleavedReactant()`
+- `getBondOrderReactant()`, `getBondOrderProduct()`
+
+Use these if you prefer to iterate bonds by role rather than the unified list.
+
+### 6.3 Reaction centre and stereo
+
+- **Reaction-centre atoms:** `bcc.getReactionCenterSet()`
+- **Stereo:** `bcc.getStereoChangeList()`, `bcc.getConformationChangeList()`
+- **Fingerprints (weighted patterns):** `getFormedCleavedWFingerprint()`, `getOrderChangesWFingerprint()`, `getStereoChangesWFingerprint()`, `getReactionCenterWFingerprint()` (may throw `CDKException` in edge cases)
+
+### 6.4 Mapped reaction for export
+
+```java
+IReaction mapped = bcc.getReaction(); // throws Exception in API
+```
+
+You can serialize with CDK **`SmilesGenerator`** using `SmiFlavor.AtomAtomMap` to emit **mapped reaction SMILES**, consistent with the `RDT` facade.
+
+### 6.5 Atom–atom mapping map
+
+- `bcc.getMappingMap()` / `bcc.getAtomAtomMappings()` — `Map` between reactant and product atoms for the chosen mapping.
+
+---
+
+## 7. What else is useful for an application?
+
+These features are often valuable next to “map + bond changes”:
+
+1. **Reaction signature / canonical hash** (`ReactionResult.getReactionSignature()`, `getCanonicalHash()`) — stable, comparable summaries of **electron/bond-change pattern** for deduplication or search.
+2. **Cross-reaction similarity** — `RDT.compare(a, b)` or fingerprint Tanimoto on `ReactionResult` (see `ReactionResult` API).
+3. **Algorithm id** — `getAlgorithm()` / `MappingSolution.getAlgorithmID()` to log which strategy (**MIN**, **MAX**, **MIXTURE**, **RINGS**) won.
+4. **Stereo and reaction-centre fragments** — `getReactionCenterFragmentList()`, `getReactionCentreTransformationPairs()` for mechanistic reporting or UI highlighting.
+5. **Energy heuristics** — `getTotalBondBreakingEnergy()`, `getEnergyDelta()` (approximate, for ranking or display).
+6. **User-provided mappings** — build `IReaction` with atom–atom maps already set, call `ReactionMechanismTool` with **`forcedMapping = false`** so RDT can **trust** existing maps when complete.
+7. **Transporter / no–bond-change reactions** — `accept_no_change = true` when the chemistry is intentionally “mapping only”.
+8. **Unbalanced reactions** — expect **warnings** or **skipped** mapping; fix stoichiometry or set **`forcedMapping`** knowingly.
+
+---
+
+## 8. Troubleshooting checklist
+
+| Symptom | Things to check |
+|--------|------------------|
+| `getSelectedSolution()` is null | Unbalanced reaction + `forcedMapping` false; parse failure; empty reactants/products |
+| Odd bond counts | Run **`StandardizeReaction`** path (constructor already does); ensure implicit H / aromaticity consistent with CDK expectations |
+| Slow on large systems | `checkComplex` true is heavier; mapping uses internal timeouts (see codebase `CallableAtomMappingTool`, `GraphMatcher`) |
+| Classpath errors | CDK version alignment; single SMSD version on the classpath |
+
+---
+
+## 9. Primary classes to import
+
+| Purpose | Package / class |
+|--------|-------------------|
+| One-shot mapping + summary | `com.bioinceptionlabs.reactionblast.api.RDT`, `ReactionResult` |
+| Full pipeline | `com.bioinceptionlabs.reactionblast.mechanism.ReactionMechanismTool`, `MappingSolution`, `BondChangeCalculator` |
+| Bond-level rows | `com.bioinceptionlabs.reactionblast.mechanism.MechanismHelpers.BondChange` |
+| Standardization | `com.bioinceptionlabs.reactionblast.tools.StandardizeReaction` |
+| RXN V2000 read | `com.bioinceptionlabs.reactionblast.tools.ChemicalFileIO.MDLRXNV2000Reader` |
+
+---
+
+## 10. Licence
+
+RDT is **LGPL-3.0**. Embedding it in another application may impose obligations (especially for distribution); check your legal requirements.
+
+---
+
+*Generated for agent/developer onboarding. For CLI usage and benchmarks, see the repository `README.md`.*
diff --git a/docs/depict-endpoint-agent.md b/docs/depict-endpoint-agent.md
new file mode 100644
index 0000000..e2f44fc
--- /dev/null
+++ b/docs/depict-endpoint-agent.md
@@ -0,0 +1,183 @@
+# Depict Endpoint Contract (Agent-Friendly)
+
+This document describes the HTTP contract for the `depict` endpoint implemented by `DepictController`.
+
+## Endpoint
+
+- Method: `GET`
+- Path: `/depict/{style}/{fmt}`
+- Required query param: `smi`
+
+### Path params
+
+- `style`: depiction style preset
+- `fmt`: output format
+
+Supported `style` values:
+
+- `cow` (color on white)
+- `cot` (color on transparent)
+- `bow` (black on white)
+- `bot` (black on transparent)
+- `wob` (white on black)
+- `wot` (white on transparent)
+- `cob` (color-on-black adjusted)
+- `nob` (neon on black)
+- `not` (neon on transparent)
+- `wcot` (white-friendly color on transparent)
+
+Supported `fmt` values (case-insensitive):
+
+- `svg`
+- `pdf`
+- `png`
+- `jpg`
+- `gif`
+
+## Required query param
+
+- `smi`: structure input string.
+
+Accepted input forms:
+
+- Molecule SMILES
+- Reaction SMILES (contains `>`)
+- Molfile text containing `V2000`
+- Molfile text containing `V3000`
+
+Important:
+
+- One request = one `smi` payload.
+- Multi-line processing is frontend behavior (send one request per line).
+
+## Optional query params
+
+All params are optional unless noted.
+
+- `sma` (default `""`): SMARTS query used for highlighting.
+- `smalim` (default `100`): max SMARTS matches considered.
+- `hdisp` (effective default `Smart`): hydrogen display mode.
+- `suppressh` (default `true`): if false, `hdisp` is ignored and provided hydrogens are preserved.
+- `alignrxnmap` (default `true`): align mapped reaction components.
+- `anon` (default `false`): anonymized atom-symbol visibility mode.
+- `annotate` (default `none`): annotation mode.
+- `abbr` (default `reagents`): abbreviation mode.
+- `bgcolor` (default `default`): background color override.
+- `fgcolor` (default `default`): atom color override.
+- `showtitle` (default `false`): embed title into depiction.
+- `arw` (default `FORWARD`): reaction arrow type.
+- `dat` (default `metals`): dative bond perception mode.
+- `zoom` (default `1.3`): depiction zoom.
+- `ratio` (default `1.1`): stroke ratio.
+- `r` (default `0`): rotation in degrees.
+- `f` (default `false`): horizontal flip.
+- `w` (default `-1`): width.
+- `h` (default `-1`): height.
+- `svgunits` (default `mm`): unit string passed to SVG renderer.
+
+## Enumerated option values
+
+### `annotate`
+
+- `none`
+- `number`
+- `mapidx`
+- `colmap`
+- `rxnchg`
+- `atomvalue`
+- `cip`
+
+### `abbr`
+
+For reactions:
+
+- `on`, `true`, `yes`, `groups+agents`
+- `groups`
+- `reagents`, `agents`
+- `off` (or omit)
+
+For molecules:
+
+- `on`, `true`, `yes`, `groups`
+- `off` (or omit)
+
+### `hdisp`
+
+Accepted values map to:
+
+- `M` or `Minimal` -> minimal hydrogens
+- `P` or `Provided` -> provided hydrogens
+- `S` or `Smart` or `default` -> smart hydrogens
+- `C` or `Stereo` -> stereo-relevant hydrogens
+- `X` or `Explicit` -> explicit hydrogens
+
+### `arw`
+
+- `EQU` -> equilibrium
+- `NGO` -> no-go
+- `RET` -> retrosynthetic
+- `RES` -> resonance
+
+### `dat`
+
+- `y` -> always perceive dative bonds
+- `m` -> metals only
+- `n` -> never
+
+### Boolean params
+
+Boolean params accept:
+
+- true: `t`, `true`, `on`, `1`
+- false: `f`, `false`, `off`, `0`
+
+## Color params
+
+`bgcolor` and `fgcolor` support:
+
+- `default` (no override)
+- For `bgcolor` only: `clear`, `transparent`, `null`
+- Hex-like strings parsed as RGBA pairs, e.g.:
+ - `#RRGGBB`
+ - `#RRGGBBAA`
+ - `0xRRGGBB`
+
+## Response contract
+
+Success responses:
+
+- `svg` -> `Content-Type: image/svg+xml`
+- `pdf` -> `Content-Type: application/pdf`
+- `png|jpg|gif` -> `Content-Type: image/{fmt}`
+
+Headers:
+
+- `Access-Control-Allow-Origin: *`
+- `Content-Length` is set
+
+## Error contract
+
+- Invalid SMILES -> HTTP `400`, HTML error body with title `Invalid SMILES`.
+- Any other exception -> HTTP `500`, HTML error body with exception name/message.
+- Unsupported `fmt` currently results in server error path (`500`) via exception handling.
+
+## Frontend integration notes
+
+- Always `encodeURIComponent` the `smi` value.
+- For line-based input, split lines client-side and issue one request per non-empty/non-comment line.
+- If your input line includes labels/titles, strip them before sending unless you know backend parsing supports your format.
+
+## Minimal examples
+
+### Basic SVG depiction
+
+`/depict/cot/svg?smi=CCO`
+
+### Reaction depiction with highlighting and arrow
+
+`/depict/bot/svg?smi=CCO%3EO%3ECC%3ECO&annotate=rxnchg&arw=RET`
+
+### Styled PNG with rotation and zoom
+
+`/depict/cow/png?smi=c1ccccc1&zoom=1.5&r=90`
+
diff --git a/pom.xml b/pom.xml
index 532ed0c..99ba739 100644
--- a/pom.xml
+++ b/pom.xml
@@ -2,253 +2,226 @@
- 4.0.0
- org.openscience.cdk
- cdkdepict
- 1.15
-
- cdkdepict-lib
- cdkdepict-webapp
-
- pom
- cdkdepict
- SMILES depiction WebApp
- http://github.com/cdk/cdkdepict
-
- UTF-8
- 2.12
- ${project.parent.version}
- 5.14.3
- 2.2
- 6.2.17
- 3.5.13
-
-
-
- John Mayfield
- http://www.github.com/johnmay/
- GMT
-
-
-
-
- GNU LGPL 2.1 or later
- http://www.gnu.org/licenses/lgpl.html
- repo
-
-
-
- https://github.com/cdk/cdk
- scm:git:git://github.com/cdk/cdk.git
- scm:git:git@github.com:cdk/cdk.git
-
-
-
- https://github.com/cdk/depict/issues
- GitHub
-
-
-
- central
- https://central.sonatype.com/repository/maven-snapshots/
-
-
- central
- https://central.sonatype.com/
- default
-
-
-
- cdk.github.com
- https://cdk.github.io/cdk/
-
-
-
-
- central-snapshot
- https://central.sonatype.com/repository/maven-snapshots/
-
- false
-
-
- true
-
-
-
-
+ 4.0.0
+ org.openscience.cdk
+ cdkdepict
+ 1.14
+
+ cdkdepict-lib
+ cdkdepict-webapp
+
+ pom
+ cdkdepict
+ SMILES depiction WebApp
+ http://github.com/cdk/cdkdepict
+
+ UTF-8
+ 17
+ 2.12
+ 4.0.0
+ ${project.parent.version}
+ 5.11.4
+ 2.2
+ 6.2.1
+ 3.4.1
+
+
+
+ John Mayfield
+ http://www.github.com/johnmay/
+ GMT
+
+
+
+
+ GNU LGPL 2.1 or later
+ http://www.gnu.org/licenses/lgpl.html
+ repo
+
+
+
+ https://github.com/cdk/cdk
+ scm:git:git://github.com/cdk/cdk.git
+ scm:git:git@github.com:cdk/cdk.git
+
+
+
+ https://github.com/cdk/depict/issues
+ GitHub
+
+
+
+ ossrh
+ https://s01.oss.sonatype.org/content/repositories/snapshots
+
+
+ ossrh
+ https://s01.oss.sonatype.org/service/local/staging/deploy/maven2/
+
+
+
+ cdk.github.com
+ http://cdk.github.io/cdk/
+
+
+
+
+ OSSRH
+ https://s01.oss.sonatype.org/content/repositories/snapshots
+
+ false
+
+
+ true
+
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-compiler-plugin
+ 3.14.0
+
+ ${java.version}
+
+
+
+
+
+
+
+ org.junit.jupiter
+ junit-jupiter
+ ${junit.version}
+ jar
+ test
+
+
+ org.hamcrest
+ hamcrest-library
+ ${hamcrest.version}
+ test
+
+
+ org.springframework
+ spring-webmvc
+ ${spring-webmvc.version}
+
+
+ org.openscience.cdk
+ cdk-atomtype
+ ${cdk.version}
+
+
+ org.openscience.cdk
+ cdk-standard
+ ${cdk.version}
+
+
+ org.openscience.cdk
+ cdk-io
+ ${cdk.version}
+
+
+ org.openscience.cdk
+ cdk-ioformats
+ ${cdk.version}
+
+
+ org.openscience.cdk
+ cdk-isomorphism
+ ${cdk.version}
+
+
+ org.openscience.cdk
+ cdk-smiles
+ ${cdk.version}
+
+
+ org.openscience.cdk
+ cdk-silent
+ ${cdk.version}
+
+
+ org.openscience.cdk
+ cdk-interfaces
+ ${cdk.version}
+
+
+ org.openscience.cdk
+ cdk-ctab
+ ${cdk.version}
+
+
+
+
+
+ ossrh
+
-
- org.apache.maven.plugins
- maven-compiler-plugin
- 3.2
+
+ org.sonatype.plugins
+ nexus-staging-maven-plugin
+ 1.6.13
+ true
+
+ ossrh
+ https://s01.oss.sonatype.org/
+ true
+
+
+
+ org.apache.maven.plugins
+ maven-gpg-plugin
+ 1.6
+
+
+ sign-artifacts
+ verify
+
+ sign
+
- 17
- 17
+ gpg
+
+ --pinentry-mode
+ loopback
+
+ ${gpg.passphrase}
-
+
+
+
+
+ org.apache.maven.plugins
+ maven-source-plugin
+ 3.2.1
+
+
+ attach-sources
+
+ jar-no-fork
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-javadoc-plugin
+ 3.3.1
+
+
+ attach-javadocs
+
+ jar
+
+
+
+
-
-
-
-
- org.junit.jupiter
- junit-jupiter
- ${junit.version}
- jar
- test
-
-
- org.hamcrest
- hamcrest-library
- ${hamcrest.version}
- test
-
-
- org.springframework
- spring-webmvc
- ${spring-webmvc.version}
-
-
- org.openscience.cdk
- cdk-atomtype
- ${cdk.version}
-
-
- org.openscience.cdk
- cdk-standard
- ${cdk.version}
-
-
- org.openscience.cdk
- cdk-io
- ${cdk.version}
-
-
- org.openscience.cdk
- cdk-ioformats
- ${cdk.version}
-
-
- org.openscience.cdk
- cdk-isomorphism
- ${cdk.version}
-
-
- org.openscience.cdk
- cdk-smiles
- ${cdk.version}
-
-
- org.openscience.cdk
- cdk-silent
- ${cdk.version}
-
-
- org.openscience.cdk
- cdk-interfaces
- ${cdk.version}
-
-
- org.openscience.cdk
- cdk-ctab
- ${cdk.version}
-
-
-
-
-
- javaee
-
- 5.3.39
- 2.7.18
-
-
-
-
- org.apache.maven.plugins
- maven-war-plugin
-
- src/main/webapp/WEB-INF/web-javaee.xml
-
-
-
- org.apache.maven.plugins
- maven-compiler-plugin
- 3.2
-
- 8
- 8
-
-
-
-
-
-
- central-deploy
-
-
-
- org.sonatype.central
- central-publishing-maven-plugin
- 0.9.0
- true
-
- central
- true
- published
-
-
-
- org.apache.maven.plugins
- maven-gpg-plugin
- 3.2.8
-
-
- sign-artifacts
- verify
-
- sign
-
-
- gpg
-
- --pinentry-mode
- loopback
-
- ${gpg.passphrase}
-
-
-
-
-
- org.apache.maven.plugins
- maven-source-plugin
- 3.3.1
-
-
- attach-sources
-
- jar
-
-
-
-
-
- org.apache.maven.plugins
- maven-javadoc-plugin
- 3.3.1
-
-
- attach-javadocs
-
- jar
-
-
-
-
-
-
-
-
+
+
+