czpilar opened a new pull request, #544:
URL: https://github.com/apache/commons-dbcp/pull/544

   This PR implements 
[DBCP-589](https://issues.apache.org/jira/browse/DBCP-589) along the direction 
discussed in [#492](https://github.com/apache/commons-dbcp/pull/492): a 
multi-module 2.x build with a new `commons-dbcp2-jakarta` artifact, while 
`commons-dbcp2` stays binary compatible.
   
   It supersedes [#492](https://github.com/apache/commons-dbcp/pull/492), which 
migrated the existing `managed` package from `javax.transaction` to 
`jakarta.transaction` in place and therefore broke binary compatibility 
(japicmp). Here the javax flavour stays as it is and the jakarta flavour is 
generated from it at build time.
   
   ### Layout
   
   ```
   commons-dbcp2-parent        parent and aggregator (pom)
   commons-dbcp2               unchanged artifact: core + javax.transaction 
based managed package
   commons-dbcp2-jakarta       org.apache.commons.dbcp2.managed.jakarta on 
jakarta.transaction-api 2.0.1
   commons-dbcp2-distribution  bin and src archives, as in commons-vfs
   ```
   
   ### No duplicated sources
   
   `commons-dbcp2-jakarta` has no Java sources in git. In `generate-sources` / 
`generate-test-sources` an antrun step copies 
`org.apache.commons.dbcp2.managed` (and the `managed` / `transaction` tests) 
from `commons-dbcp2` and rewrites them:
   
   - `javax.transaction.*` becomes `jakarta.transaction.*`, except 
`javax.transaction.xa`, which is part of the JDK.
   - `org.apache.commons.dbcp2.managed` becomes 
`org.apache.commons.dbcp2.managed.jakarta`, and the test helper package 
`org.apache.commons.dbcp2.transaction` becomes 
`org.apache.commons.dbcp2.transaction.jakarta`.
   - `@since` values older than 2.15.0 become 2.15.0. Newer values are kept, so 
later additions to `managed` get the right version in both flavours.
   
   The generated sources go through the normal compile, test, javadoc, 
sources-jar, SpotBugs, PMD, moditect and OSGi steps. Checkstyle is skipped in 
that module because the originals are already checked in `commons-dbcp2`. A fix 
in `managed` applies to both flavours automatically.
   
   ### Details
   
   - **Moved sources:** `src/main`, `src/test` and `src/conf` are in 
`commons-dbcp2/` via pure renames in a separate commit, so `git log --follow` 
and blame keep working. `src/site`, `src/changes` and `src/media` stay at the 
root.
   - **JPMS:** the `commons-dbcp2` module descriptor now has `requires static 
java.transaction`. The JTA API is only needed by the managed package, and 
`commons-dbcp2-jakarta` users on the module path don't need the javax API.
   - **Dependencies:** `commons-dbcp2-jakarta` excludes 
`jakarta.transaction-api` 1.3.3 (the javax packages) from `commons-dbcp2` and 
depends on `jakarta.transaction-api` 2.0.1. Runtime dependencies are 
`commons-dbcp2`, `commons-pool2`, `commons-logging` and 
`jakarta.transaction-api` 2.0.1. `cdi-api` and `interceptor-api` are 
`provided`, only for jdeps. Test dependencies use the jakarta flavours of 
Narayana and Geronimo, with the versions kept Java 8 compatible.
   - **Distribution:** `commons-dbcp2-distribution` builds the bin archive 
(both jars plus javadoc) and the src archive (the whole multi-module tree) in 
the `release` profile. The root and the code modules skip the assembly.
   - **Site:** each module has its own Javadoc (`/commons-dbcp2/apidocs/`, 
`/commons-dbcp2-jakarta/apidocs/`). The menu, index and building pages are 
updated, and the index documents the new Maven coordinates. The old `/apidocs/` 
URL could be kept when publishing via `ignorePathsToDelete` if you prefer.
   - **Version:** bumped to 2.15.0-SNAPSHOT, since a new artifact is a new 
feature. `commons.bc.version` stays 2.14.0.
   - **Other:** `changes.xml` has an entry for DBCP-589, and `.gitignore` now 
ignores the Narayana `ObjectStore/` directories in the modules too.
   
   ### Verification
   
   - The default goal (`mvn`) passes on Java 8, 11, 17, 21 and 25: 1605 tests 
in `commons-dbcp2`, 275 generated tests in `commons-dbcp2-jakarta`. `japicmp` 
against 2.14.0 is green.
   - `mvn -Prelease -Dgpg.skip -Dcommons.release.isDistModule=false verify` 
builds the bin and src archives.
   - `mvn package site site:stage` generates the site.
   - Tested downstream in an application running Narayana JTA with 
`commons-dbcp2-jakarta` on `jakarta.transaction` 2.0.1.
   
   **AI disclosure:** Claude Code (Anthropic) was used to restructure the 
build, write the POM and assembly changes, and run the verification builds. I 
reviewed all changes.


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]

Reply via email to