Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package apache-commons-logging for 
openSUSE:Factory checked in at 2026-06-25 10:49:48
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/apache-commons-logging (Old)
 and      /work/SRC/openSUSE:Factory/.apache-commons-logging.new.2088 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "apache-commons-logging"

Thu Jun 25 10:49:48 2026 rev:31 rq:1361308 version:1.4.0

Changes:
--------
--- 
/work/SRC/openSUSE:Factory/apache-commons-logging/apache-commons-logging.changes
    2026-05-21 18:24:38.067896260 +0200
+++ 
/work/SRC/openSUSE:Factory/.apache-commons-logging.new.2088/apache-commons-logging.changes
  2026-06-25 10:50:45.243972561 +0200
@@ -1,0 +2,14 @@
+Sun Jun 21 15:44:39 UTC 2026 - Fridrich Strba <[email protected]>
+
+- Upgrade to 1.4.0
+  * Fixed Bugs
+    + Use the new Apache oak leaf logo
+    + Fix broken URLs in website links
+    + Add support for Jakarta servlets, see org.apache.commons
+      .logging.jakarta.ServletContextCleaner #419
+  * Changes
+    + Bump org.apache.commons:commons-parent from 97 to 102
+    + Bump log4j2.version from 2.25.3 to 2.26.0
+    + Bump org.slf4j:slf4j-api from 2.0.17 to 2.0.18
+
+-------------------------------------------------------------------

Old:
----
  build.properties
  build.xml
  commons-logging-1.3.6-src.tar.gz

New:
----
  apache-commons-logging-build.xml
  commons-logging-1.4.0-src.tar.gz

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ apache-commons-logging.spec ++++++
--- /var/tmp/diff_new_pack.vziZvk/_old  2026-06-25 10:50:46.720023695 +0200
+++ /var/tmp/diff_new_pack.vziZvk/_new  2026-06-25 10:50:46.724023833 +0200
@@ -20,16 +20,19 @@
 %define base_name  logging
 %define short_name commons-%{base_name}
 Name:           apache-%{short_name}
-Version:        1.3.6
+Version:        1.4.0
 Release:        0
 Summary:        Apache Commons Logging
 License:        Apache-2.0
 URL:            https://commons.apache.org/%{base_name}
 Source0:        
https://archive.apache.org/dist/commons/%{base_name}/source/%{short_name}-%{version}-src.tar.gz
-Source1:        build.xml
-Source2:        build.properties
+Source1:        %{name}-build.xml
 BuildRequires:  ant
+BuildRequires:  avalon-framework-api
+BuildRequires:  avalon-logkit
+BuildRequires:  fdupes
 BuildRequires:  glassfish-servlet-api
+BuildRequires:  jakarta-servlet
 BuildRequires:  java-devel >= 1.8
 BuildRequires:  javapackages-local >= 6
 BuildRequires:  reload4j
@@ -51,36 +54,43 @@
 the two, and to allow a developer to not tie himself to a particular
 logging implementation.
 
+%package javadoc
+Summary:        Javadoc for %{name}
+Group:          Documentation/HTML
+
+%description javadoc
+Javadoc for %{name}.
+
 %prep
 %setup -q -n %{short_name}-%{version}-src
 
 cp %{SOURCE1} build.xml
-cp %{SOURCE2} build.properties
+%pom_remove_dep :log4j-api
+rm src/main/java/org/apache/commons/logging/impl/Log4jApiLogFactory.java
+%pom_remove_dep :slf4j-api
+rm src/main/java/org/apache/commons/logging/impl/Slf4jLogFactory.java
 
-rm \
-    src/main/java/org/apache/commons/logging/impl/Log4jApiLogFactory.java \
-    src/main/java/org/apache/commons/logging/impl/Slf4jLogFactory.java
+%pom_change_dep org.apache.logging.log4j:log4j-1.2-api 
ch.qos.reload4j:reload4j:1.2.25
+%pom_change_dep :avalon-framework ::avalon-framework-api:4.3
 
 sed -i 's/\r//' RELEASE-NOTES.txt LICENSE.txt
 
 %build
-export MAVEN_REPO_LOCAL=$(pwd)/.m2/repository
-mkdir -p $MAVEN_REPO_LOCAL
-
-export CLASSPATH=$(build-classpath \
-                   plexus/ \
-                  ):target/classes:target/test-classes
-ant \
-  -Dmaven.mode.offline=true -lib %{_javadir} \
-  -Dlog4j12.jar=$(find-jar reload4j/reload4j) -Dservletapi.jar=$(find-jar 
glassfish-servlet-api) \
-  dist
+mkdir -p lib
+build-jar-repository -s lib \
+    avalon-framework-api \
+    avalon-logkit \
+    glassfish-servlet-api \
+    jakarta-servlet/jakarta.servlet-api \
+    reload4j/reload4j
+ant jar javadoc
 
 %install
 # jars
-install -d -m 755 %{buildroot}%{_javadir}
-install -p -m 644 target/%{short_name}-%{version}.jar 
%{buildroot}%{_javadir}/%{name}.jar
-install -p -m 644 target/%{short_name}-api-%{version}.jar 
%{buildroot}%{_javadir}/%{name}-api.jar
-install -p -m 644 target/%{short_name}-adapters-%{version}.jar 
%{buildroot}%{_javadir}/%{name}-adapters.jar
+install -dm 0755 %{buildroot}%{_javadir}
+install -pm 0644 target/%{short_name}-%{version}.jar 
%{buildroot}%{_javadir}/%{name}.jar
+install -pm 0644 target/%{short_name}-%{version}-api.jar 
%{buildroot}%{_javadir}/%{name}-api.jar
+install -pm 0644 target/%{short_name}-%{version}-adapters.jar 
%{buildroot}%{_javadir}/%{name}-adapters.jar
 
 pushd %{buildroot}%{_javadir}
 for jar in %{name}*; do
@@ -89,14 +99,22 @@
 popd
 
 # pom
-install -d -m 755 %{buildroot}%{_mavenpomdir}
+install -dm 0755 %{buildroot}%{_mavenpomdir}
 %{mvn_install_pom} pom.xml %{buildroot}/%{_mavenpomdir}/%{short_name}.pom
 %add_maven_depmap %{short_name}.pom %{short_name}.jar -a 
"org.apache.commons:%{short_name}","apache:%{short_name}"
 %add_maven_depmap %{short_name}:%{short_name}::api:%{version} 
%{short_name}-api.jar -a 
"%{short_name}:%{short_name}-api","org.apache.commons:%{short_name}-api","apache:%{short_name}-api"
 %add_maven_depmap %{short_name}:%{short_name}::adapters:%{version} 
%{short_name}-adapters.jar -a 
"%{short_name}:%{short_name}-adapters","org.apache.commons:%{short_name}-adapters","apache:%{short_name}-adapters"
 
+# javadoc
+install -dm 755 %{buildroot}%{_javadocdir}/%{name}
+cp -pr target/site/apidocs/* %{buildroot}%{_javadocdir}/%{name}/
+%fdupes -s %{buildroot}%{_javadocdir}/%{name}/
+
 %files -f .mfiles
 %{_javadir}/%{name}*.jar
 %license LICENSE.txt
 %doc PROPOSAL.html RELEASE-NOTES.txt NOTICE.txt
 
+%files javadoc
+%{_javadocdir}/%{name}
+

++++++ _scmsync.obsinfo ++++++
--- /var/tmp/diff_new_pack.vziZvk/_old  2026-06-25 10:50:46.824027298 +0200
+++ /var/tmp/diff_new_pack.vziZvk/_new  2026-06-25 10:50:46.836027713 +0200
@@ -1,6 +1,6 @@
-mtime: 1779181146
-commit: 1c099473ab03fc2dad685962e61b15fa116bd333b6ef7e08e010261f3348b1b1
+mtime: 1782205141
+commit: f948427148d255c91d9023d67d0b3102faf1d5c755bb62a5b184df7a59e21f2a
 url: https://src.opensuse.org/java-packages/apache-commons-logging
-revision: 1c099473ab03fc2dad685962e61b15fa116bd333b6ef7e08e010261f3348b1b1
+revision: f948427148d255c91d9023d67d0b3102faf1d5c755bb62a5b184df7a59e21f2a
 projectscmsync: https://src.opensuse.org/java-packages/_ObsPrj
 

++++++ apache-commons-logging-build.xml ++++++
<?xml version="1.0" encoding="UTF-8"?>

<project name="commons-logging" default="package" basedir=".">

  <!-- ====================================================================== 
-->
  <!-- Build environment properties                                           
-->
  <!-- ====================================================================== 
-->

  <property file="build.properties" />

  <property name="project.groupId" value="commons-logging" />
  <property name="project.artifactId" value="commons-logging" />
  <property name="spec.version" value="1.4" />
  <property name="project.version" value="${spec.version}.0" />

  <property name="compiler.release" value="8" />
  <property name="compiler.source" value="1.${compiler.release}" />
  <property name="compiler.target" value="${compiler.source}" />

  <property name="build.finalName" 
value="${project.artifactId}-${project.version}" />
  <property name="build.dir" value="target"/>
  <property name="build.outputDir" value="${build.dir}/classes"/>
  <property name="build.srcDir" value="src/main/java"/>
  <property name="build.resourceDir" value="."/>
  <property name="reporting.outputDirectory" value="${build.dir}/site"/>

  <!-- ====================================================================== 
-->
  <!-- Defining classpaths                                                    
-->
  <!-- ====================================================================== 
-->

  <path id="build.classpath">
    <fileset dir="lib">
      <include name="**/*.jar">
      </include>
    </fileset>
  </path>

  <!-- ====================================================================== 
-->
  <!-- Cleaning up target                                                     
-->
  <!-- ====================================================================== 
-->

  <target name="clean" description="Clean the output directory">
    <delete dir="${build.dir}"/>
  </target>

  <!-- ====================================================================== 
-->
  <!-- Compilation target                                                     
-->
  <!-- ====================================================================== 
-->

  <target name="compile" description="Compile the code">
    <mkdir dir="${build.outputDir}"/>
    <javac destdir="${build.outputDir}"
           encoding="UTF-8"
           nowarn="false"
           debug="true"
           optimize="false"
           deprecation="true"
           release="${compiler.release}"
           target="${compiler.target}"
           verbose="false"
           fork="false"
           source="${compiler.source}">
      <src>
        <pathelement location="${build.srcDir}"/>
      </src>
      <classpath refid="build.classpath"/>
    </javac>
    <mkdir dir="${build.outputDir}/META-INF"/>
    <copy todir="${build.outputDir}/META-INF">
      <fileset dir="${build.resourceDir}">
        <include name="NOTICE.txt"/>
        <include name="LICENSE.txt"/>
        <include name="NOTICE"/>
        <include name="LICENSE"/>
      </fileset>
    </copy>
  </target>

  <!-- ====================================================================== 
-->
  <!-- Javadoc target                                                         
-->
  <!-- ====================================================================== 
-->

  <target name="javadoc" description="Generates the Javadoc of the application">
    <javadoc sourcepath="${build.srcDir}"
             packagenames="*"
             destdir="${reporting.outputDirectory}/apidocs"
             access="protected"
             verbose="false"
             encoding="UTF-8"
             version="true"
             use="true"
             author="true"
             splitindex="false"
             nodeprecated="false"
             nodeprecatedlist="false"
             notree="false"
             noindex="false"
             nohelp="false"
             nonavbar="false"
             serialwarn="false"
             docencoding="UTF-8"
             source="${compiler.source}"
             linksource="true"
             breakiterator="false">
      <classpath refid="build.classpath"/>
    </javadoc>
  </target>

  <!-- ====================================================================== 
-->
  <!-- Package target                                                         
-->
  <!-- ====================================================================== 
-->

  <macrodef name="build-jar">
    <attribute name="suffix" default=""/>
    <element name="includes" optional="true"/>
    <element name="excludes" optional="true"/>
    <sequential>
      <jar jarfile="${build.dir}/${build.finalName}@{suffix}.jar"
           compress="true"
           index="false"
           basedir="${build.outputDir}"
           excludes="**/package.html">
        <includes/>
        <excludes/>
        <manifest>
          <attribute name="Automatic-Module-Name" 
value="org.apache.commons.logging"/>
          <attribute name="Bundle-Description" value="Apache Commons Logging is 
a thin adapter allowing configurable bridging to other, well-known logging 
systems."/>
          <attribute name="Bundle-DocURL" 
value="https://commons.apache.org/proper/commons-logging/"/>
          <attribute name="Bundle-License" 
value="https://www.apache.org/licenses/LICENSE-2.0.txt"/>
          <attribute name="Bundle-ManifestVersion" value="2"/>
          <attribute name="Bundle-Name" value="Apache Commons Logging"/>
          <attribute name="Bundle-SymbolicName" 
value="org.apache.commons.${project.artifactId}"/>
          <attribute name="Bundle-Vendor" value="The Apache Software 
Foundation"/>
          <attribute name="Bundle-Version" value="${project.version}"/>
          <attribute name="Export-Package" 
value="org.apache.commons.logging.impl;version=&quot;${project.version}&quot;;uses:=&quot;javax.servlet,org.apache.avalon.framework.logger,org.apache.commons.logging,org.apache.log,org.apache.log4j&quot;,org.apache.commons.logging.jakarta;version=&quot;${project.version}&quot;;uses:=&quot;jakarta.servlet&quot;,org.apache.commons.logging;version=&quot;${project.version}&quot;"/>
          <attribute name="Implementation-Title" value="Apache Commons 
Logging"/>
          <attribute name="Implementation-Vendor" value="The Apache Software 
Foundation"/>
          <attribute name="Implementation-Version" value="${project.version}"/>
          <attribute name="Import-Package" 
value="jakarta.servlet;version=&quot;[4.0.2,7.0.0)&quot;;resolution:=optional,javax.servlet;version=&quot;[2.1.0,5.0.0)&quot;;resolution:=optional,org.apache.avalon.framework.logger;version=&quot;[4.1.3,4.1.5]&quot;;resolution:=optional,org.apache.log4j;version=&quot;[1.2.15,2.0.0)&quot;;resolution:=optional,org.apache.log;version=&quot;[1.0.1,1.0.1]&quot;;resolution:=optional,org.apache.logging.log4j.spi;version=&quot;[2.0,4.0)&quot;;resolution:=optional,org.apache.logging.log4j.util;version=&quot;[2.0,4.0)&quot;;resolution:=optional,org.apache.logging.log4j;version=&quot;[2.0,4.0)&quot;;resolution:=optional,org.slf4j.spi;version=&quot;[1.7,3)&quot;;resolution:=optional,org.slf4j;version=&quot;[1.7,3)&quot;;resolution:=optional"/>
          <attribute name="Include-Resource" 
value="META-INF/LICENSE.txt=LICENSE.txt,META-INF/NOTICE.txt=NOTICE.txt"/>
          <attribute name="Require-Capability" 
value="osgi.ee;filter:=&quot;(&amp;(osgi.ee=JavaSE)(version=1.8))&quot;,osgi.extender;filter:=&quot;(&amp;(osgi.extender=osgi.serviceloader.processor)(version>=1.0.0)(!(version>=2.0.0)))&quot;;resolution:=optional,osgi.serviceloader;filter:=&quot;(osgi.serviceloader=org.apache.commons.logging.LogFactory)&quot;;osgi.serviceloader=&quot;org.apache.commons.logging.LogFactory&quot;;resolution:=optional;cardinality:=multiple"/>
          <attribute name="Specification-Title" value="Apache Commons Logging"/>
          <attribute name="Specification-Vendor" value="The Apache Software 
Foundation"/>
          <attribute name="Specification-Version" value="${spec.version}"/>
        </manifest>
      </jar>
    </sequential>
  </macrodef>

  <target name="package" depends="compile" description="Package the 
application">
    <build-jar suffix=""/>
    <build-jar suffix="-api">
      <includes>
        <include name="org/apache/commons/logging/*.class"/>
        <include name="org/apache/commons/logging/impl/LogFactoryImpl*.class"/>
        <include name="org/apache/commons/logging/impl/WeakHashtable*.class"/>
        <include name="org/apache/commons/logging/impl/SimpleLog*.class"/>
        <include name="org/apache/commons/logging/impl/NoOpLog*.class"/>
        <include name="org/apache/commons/logging/impl/Jdk14Logger.class"/>
        <include name="META-INF/LICENSE.txt"/>
        <include name="META-INF/NOTICE.txt"/>
      </includes>
    </build-jar>
    <build-jar suffix="-adapters">
      <includes>
        <include name="org/apache/commons/logging/impl/**/*.class"/>
        <include name="META-INF/LICENSE.txt"/>
        <include name="META-INF/NOTICE.txt"/>
      </includes>
      <excludes>
        <exclude name="org/apache/commons/logging/impl/WeakHashtable*.class"/>
        <exclude name="org/apache/commons/logging/impl/LogFactoryImpl*.class"/>
      </excludes>
    </build-jar>
  </target>

  <!-- ====================================================================== 
-->
  <!-- A dummy target for the package named after the type it creates         
-->
  <!-- ====================================================================== 
-->

  <target name="jar" depends="package" description="Builds the jar for the 
application"/>

</project>

++++++ build.specials.obscpio ++++++

++++++ build.specials.obscpio ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/.gitignore new/.gitignore
--- old/.gitignore      1970-01-01 01:00:00.000000000 +0100
+++ new/.gitignore      2026-06-23 10:59:01.000000000 +0200
@@ -0,0 +1 @@
+.osc

++++++ commons-logging-1.3.6-src.tar.gz -> commons-logging-1.4.0-src.tar.gz 
++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/commons-logging-1.3.6-src/RELEASE-NOTES.txt 
new/commons-logging-1.4.0-src/RELEASE-NOTES.txt
--- old/commons-logging-1.3.6-src/RELEASE-NOTES.txt     2026-03-05 
00:05:20.000000000 +0100
+++ new/commons-logging-1.4.0-src/RELEASE-NOTES.txt     2026-06-11 
22:45:24.000000000 +0200
@@ -1,3 +1,42 @@
+Apache Commons Logging 1.4.0 Release Notes
+------------------------------------------
+
+The Apache Commons Logging team is pleased to announce the release of Apache 
Commons Logging 1.4.0.
+
+Apache Commons Logging is a thin adapter allowing configurable bridging to 
other,
+well-known logging systems.
+
+This is a feature and maintenance release. Java 8 or later is required.
+
+Changes in this version
+-----------------------
+
+
+Fixed Bugs
+----------
+
+*               Use the new Apache oak leaf logo. Thanks to Gary Gregory.
+*               Fix broken URLs in website links. Thanks to Stanimir 
Stamenkov, Gary Gregory.
+*               Add support for Jakarta servlets, see 
org.apache.commons.logging.jakarta.ServletContextCleaner #419. Thanks to Kiril 
Keranov, Gary Gregory.
+
+Changes
+-------
+
+*               Bump org.apache.commons:commons-parent from 97 to 102. Thanks 
to Gary Gregory.
+*               Bump log4j2.version from 2.25.3 to 2.26.0. Thanks to Gary 
Gregory, Dependabot.
+*               Bump org.slf4j:slf4j-api from 2.0.17 to 2.0.18. Thanks to Gary 
Gregory, Dependabot.
+
+
+Historical list of changes: 
https://commons.apache.org/proper/commons-logging/changes.html
+
+Download it from 
https://commons.apache.org/proper/commons-logging/download_logging.cgi
+
+For complete information on Apache Commons Logging, including instructions on 
how to submit bug reports,
+patches, or suggestions for improvement, see the Apache Commons Logging 
website:
+
+https://commons.apache.org/proper/commons-logging/
+
+-----------------------------------------------------------------------------
 Apache Commons Logging 1.3.6 Release Notes
 ------------------------------------------
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/commons-logging-1.3.6-src/pom.xml 
new/commons-logging-1.4.0-src/pom.xml
--- old/commons-logging-1.3.6-src/pom.xml       2026-03-05 00:05:20.000000000 
+0100
+++ new/commons-logging-1.4.0-src/pom.xml       2026-06-11 22:45:24.000000000 
+0200
@@ -26,13 +26,13 @@
   <parent>
     <groupId>org.apache.commons</groupId>
     <artifactId>commons-parent</artifactId>
-    <version>97</version>
+    <version>102</version>
   </parent>
   <modelVersion>4.0.0</modelVersion>
   <groupId>commons-logging</groupId>
   <artifactId>commons-logging</artifactId>
   <name>Apache Commons Logging</name>
-  <version>1.3.6</version>
+  <version>1.4.0</version>
   <description>Apache Commons Logging is a thin adapter allowing configurable 
bridging to other,
     well-known logging systems.</description>
   <url>https://commons.apache.org/proper/commons-logging/</url>
@@ -43,9 +43,9 @@
     
<maven.compiler.target>${commons.logging.javaversion}</maven.compiler.target>
     <commons.componentid>logging</commons.componentid>
     <commons.module.name>org.apache.commons.logging</commons.module.name>
-    <commons.release.version>1.3.6</commons.release.version>
-    <commons.release.next>1.3.7</commons.release.next>
-    <commons.bc.version>1.3.5</commons.bc.version>
+    <commons.release.version>1.4.0</commons.release.version>
+    <commons.release.next>1.4.1</commons.release.next>
+    <commons.bc.version>1.3.6</commons.bc.version>
     <commons.release.isDistModule>true</commons.release.isDistModule>
     <commons.jira.id>LOGGING</commons.jira.id>
     <commons.jira.pid>12310484</commons.jira.pid>
@@ -56,12 +56,14 @@
     <commons.failsafe.version>3.2.1</commons.failsafe.version>
     <!-- Allow default test run order to be changed -->
     <failsafe.runorder>filesystem</failsafe.runorder>
-    <log4j2.version>2.25.3</log4j2.version>
+    <log4j2.version>2.26.0</log4j2.version>
     <logback.version>1.3.16</logback.version>
-    <slf4j.version>2.0.17</slf4j.version>
+    <slf4j.version>2.0.18</slf4j.version>
     <findsecbugs.version>1.14.0</findsecbugs.version>
+    <jakarta.servlet-api.version>5.0.0</jakarta.servlet-api.version>
     <commons.osgi.import>
       javax.servlet;version="[2.1.0, 5.0.0)";resolution:=optional,
+      jakarta.servlet;version="[4.0.2, 7.0.0)";resolution:=optional,
       org.apache.avalon.framework.logger;version="[4.1.3, 
4.1.5]";resolution:=optional,
       org.apache.log;version="[1.0.1, 1.0.1]";resolution:=optional,
       org.apache.log4j;version="[1.2.15, 2.0.0)";resolution:=optional,
@@ -72,7 +74,7 @@
       org.slf4j.spi;version="[1.7, 3)";resolution:=optional
     </commons.osgi.import>
     <!-- project.build.outputTimestamp is managed by Maven plugins, see 
https://maven.apache.org/guides/mini/guide-reproducible-builds.html -->
-    
<project.build.outputTimestamp>2026-03-04T23:05:20Z</project.build.outputTimestamp>
+    
<project.build.outputTimestamp>2026-06-11T20:45:24Z</project.build.outputTimestamp>
     <!-- JaCoCo: Don't make code coverage worse than: -->
     <commons.jacoco.haltOnFailure>true</commons.jacoco.haltOnFailure>
     <commons.jacoco.classRatio>0.42</commons.jacoco.classRatio>
@@ -275,6 +277,7 @@
                 
<log4j-api>${org.apache.logging.log4j:log4j-api:jar}</log4j-api>
                 <logkit>${logkit:logkit:jar}</logkit>
                 
<servlet-api>${javax.servlet:javax.servlet-api:jar}</servlet-api>
+                
<jakarta-servlet-api>${jakarta.servlet:jakarta.servlet-api:jar}</jakarta-servlet-api>
                 
<commons-logging>target/${project.build.finalName}.jar</commons-logging>
                 
<commons-logging-api>target/${project.build.finalName}-api.jar</commons-logging-api>
                 
<commons-logging-adapters>target/${project.build.finalName}-adapters.jar</commons-logging-adapters>
@@ -578,6 +581,13 @@
       <scope>provided</scope>
       <optional>true</optional>
     </dependency>
+    <dependency>
+      <groupId>jakarta.servlet</groupId>
+      <artifactId>jakarta.servlet-api</artifactId>
+      <version>${jakarta.servlet-api.version}</version>
+      <scope>provided</scope>
+      <optional>true</optional>
+    </dependency>
     <dependency>
       <groupId>org.apache.commons</groupId>
       <artifactId>commons-lang3</artifactId>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/commons-logging-1.3.6-src/src/changes/changes.xml 
new/commons-logging-1.4.0-src/src/changes/changes.xml
--- old/commons-logging-1.3.6-src/src/changes/changes.xml       2026-03-05 
00:05:20.000000000 +0100
+++ new/commons-logging-1.4.0-src/src/changes/changes.xml       2026-06-11 
22:45:24.000000000 +0200
@@ -45,6 +45,17 @@
     <title>Release Notes</title>
   </properties>
   <body>
+    <release version="1.4.0" date="2026-06-11" description="This is a feature 
and maintenance release. Java 8 or later is required.">
+      <!-- FIX -->
+      <action dev="ggregory" type="fix" due-to="Gary Gregory">Use the new 
Apache oak leaf logo.</action>
+      <action dev="ggregory" type="fix" due-to="Stanimir Stamenkov, Gary 
Gregory">Fix broken URLs in website links.</action>
+      <!-- ADD -->
+      <action dev="ggregory" type="fix" due-to="Kiril Keranov, Gary 
Gregory">Add support for Jakarta servlets, see 
org.apache.commons.logging.jakarta.ServletContextCleaner #419.</action>
+      <!-- UPDATE -->
+      <action dev="ggregory" type="update" due-to="Gary Gregory">Bump 
org.apache.commons:commons-parent from 97 to 102.</action>
+      <action dev="ggregory" type="update" due-to="Gary Gregory, 
Dependabot">Bump log4j2.version from 2.25.3 to 2.26.0.</action>
+      <action dev="ggregory" type="update" due-to="Gary Gregory, 
Dependabot">Bump org.slf4j:slf4j-api from 2.0.17 to 2.0.18.</action>
+    </release>
     <release version="1.3.6" date="2026-03-04" description="This is a feature 
and maintenance release. Java 8 or later is required.">
       <!-- FIX -->
       <action dev="ggregory" type="fix" due-to="Gary Gregory">Fix running 
spotbugs:check: Unable to parse configuration of mojo.</action>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/commons-logging-1.3.6-src/src/changes/release-notes.vm 
new/commons-logging-1.4.0-src/src/changes/release-notes.vm
--- old/commons-logging-1.3.6-src/src/changes/release-notes.vm  2026-03-05 
00:05:20.000000000 +0100
+++ new/commons-logging-1.4.0-src/src/changes/release-notes.vm  2026-06-11 
22:45:24.000000000 +0200
@@ -15,7 +15,7 @@
 ## specific language governing permissions and limitations
 ## under the License.
 ${project.name} ${version} Release Notes
-------------------------------------------------
+------------------------------------------
 
 The ${developmentTeam} is pleased to announce the release of ${project.name} 
${version}.
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/commons-logging-1.3.6-src/src/main/java/org/apache/commons/logging/Log.java 
new/commons-logging-1.4.0-src/src/main/java/org/apache/commons/logging/Log.java
--- 
old/commons-logging-1.3.6-src/src/main/java/org/apache/commons/logging/Log.java 
    2026-03-05 00:05:20.000000000 +0100
+++ 
new/commons-logging-1.4.0-src/src/main/java/org/apache/commons/logging/Log.java 
    2026-06-11 22:45:24.000000000 +0200
@@ -24,6 +24,7 @@
  * parameter representing the "name" of this Log.
  * <p>
  * The six logging levels used by {@code Log} are (in order):
+ * </p>
  * <ol>
  * <li>trace (the least serious)</li>
  * <li>debug</li>
@@ -32,17 +33,21 @@
  * <li>error</li>
  * <li>fatal (the most serious)</li>
  * </ol>
+ * <p>
  * The mapping of these log levels to the concepts used by the underlying
  * logging system is implementation dependent.
  * The implementation should ensure, though, that this ordering behaves
  * as expected.
+ * </p>
  * <p>
  * Performance is often a logging concern.
  * By examining the appropriate property,
  * a component can avoid expensive operations (producing information
  * to be logged).
+ * </p>
  * <p>
- * For example,
+ * For example:
+ * </p>
  * <pre>
  *    if (log.isDebugEnabled()) {
  *        ... do something expensive ...
@@ -53,6 +58,7 @@
  * Configuration of the underlying logging system will generally be done
  * external to the Logging APIs, through whatever mechanism is supported by
  * that system.
+ * </p>
  */
 public interface Log {
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/commons-logging-1.3.6-src/src/main/java/org/apache/commons/logging/LogSource.java
 
new/commons-logging-1.4.0-src/src/main/java/org/apache/commons/logging/LogSource.java
--- 
old/commons-logging-1.3.6-src/src/main/java/org/apache/commons/logging/LogSource.java
       2026-03-05 00:05:20.000000000 +0100
+++ 
new/commons-logging-1.4.0-src/src/main/java/org/apache/commons/logging/LogSource.java
       2026-06-11 22:45:24.000000000 +0200
@@ -29,6 +29,7 @@
  * <p>
  * By default, calling {@code getInstance()} will use the following
  * algorithm:
+ * </p>
  * <ul>
  * <li>If Log4J is available, return an instance of
  *     {@code org.apache.commons.logging.impl.Log4JLogger}.</li>
@@ -39,6 +40,7 @@
  * </ul>
  * <p>
  * You can change the default behavior in one of two ways:
+ * </p>
  * <ul>
  * <li>On the startup command line, set the system property
  *     {@code org.apache.commons.logging.log} to the name of the
@@ -47,7 +49,7 @@
  * <li>At runtime, call {@code LogSource.setLogImplementation()}.</li>
  * </ul>
  *
- * @deprecated Use {@link LogFactory} instead - The default factory
+ * @deprecated Use {@link LogFactory} instead. The default factory
  *  implementation performs exactly the same algorithm as this class did
  */
 @Deprecated
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/commons-logging-1.3.6-src/src/main/java/org/apache/commons/logging/impl/AvalonLogger.java
 
new/commons-logging-1.4.0-src/src/main/java/org/apache/commons/logging/impl/AvalonLogger.java
--- 
old/commons-logging-1.3.6-src/src/main/java/org/apache/commons/logging/impl/AvalonLogger.java
       2026-03-05 00:05:20.000000000 +0100
+++ 
new/commons-logging-1.4.0-src/src/main/java/org/apache/commons/logging/impl/AvalonLogger.java
       2026-06-11 22:45:24.000000000 +0200
@@ -27,6 +27,7 @@
  * logging calls to the Avalon logging abstraction: the Logger interface.
  * <p>
  * There are two ways in which this class can be used:
+ * </p>
  * <ul>
  * <li>the instance can be constructed with an Avalon logger
  * (by calling {@link #AvalonLogger(Logger)}). In this case, it acts
@@ -48,6 +49,7 @@
  * commons-logging, but this never actually worked (a NullPointerException 
would
  * be thrown as soon as the deserialized object was used), so removing this 
marker
  * is not considered to be an incompatible change.
+ * </p>
  *
  * @deprecated Scheduled for removal because the Apache Avalon Project has 
been discontinued.
  */
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/commons-logging-1.3.6-src/src/main/java/org/apache/commons/logging/impl/Log4JLogger.java
 
new/commons-logging-1.4.0-src/src/main/java/org/apache/commons/logging/impl/Log4JLogger.java
--- 
old/commons-logging-1.3.6-src/src/main/java/org/apache/commons/logging/impl/Log4JLogger.java
        2026-03-05 00:05:20.000000000 +0100
+++ 
new/commons-logging-1.4.0-src/src/main/java/org/apache/commons/logging/impl/Log4JLogger.java
        2026-06-11 22:45:24.000000000 +0200
@@ -30,16 +30,20 @@
  * <p>
  * Initial configuration of the corresponding Logger instances should be done
  * in the usual manner, as outlined in the Log4J documentation.
+ * </p>
  * <p>
  * The reason this logger is distinct from the 1.3.0 logger is that in version 
1.2
  * of Log4J:
+ * </p>
  * <ul>
  * <li>class Logger takes Priority parameters not Level parameters.</li>
  * <li>class Level extends Priority</li>
  * </ul>
+ * <p>
  * Log4j 1.3 is expected to change Level so it no longer extends Priority, 
which is
  * a non-binary-compatible change. The class generated by compiling this code 
against
  * Log4j 1.2 will therefore not run against Log4j 1.3.
+ * </p>
  *
  * @deprecated Scheduled for removal since version 1.x of Log4j has reached 
end-of-life.
  */
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/commons-logging-1.3.6-src/src/main/java/org/apache/commons/logging/impl/ServletContextCleaner.java
 
new/commons-logging-1.4.0-src/src/main/java/org/apache/commons/logging/impl/ServletContextCleaner.java
--- 
old/commons-logging-1.3.6-src/src/main/java/org/apache/commons/logging/impl/ServletContextCleaner.java
      2026-03-05 00:05:20.000000000 +0100
+++ 
new/commons-logging-1.4.0-src/src/main/java/org/apache/commons/logging/impl/ServletContextCleaner.java
      2026-06-11 22:45:24.000000000 +0200
@@ -38,11 +38,13 @@
  * some rare cases where the WeakHashtable approach does not work; in these
  * situations specifying this class as a listener for the web application will
  * ensure that all references held by commons-logging are fully released.
+ * </p>
  * <p>
  * To use this class, configure the webapp deployment descriptor to call
  * this class on webapp undeploy; the contextDestroyed method will tell
  * every accessible LogFactory class that the entry in its map for the
  * current webapp's context class loader should be cleared.
+ * </p>
  *
  * @since 1.1
  */
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/commons-logging-1.3.6-src/src/main/java/org/apache/commons/logging/jakarta/ServletContextCleaner.java
 
new/commons-logging-1.4.0-src/src/main/java/org/apache/commons/logging/jakarta/ServletContextCleaner.java
--- 
old/commons-logging-1.3.6-src/src/main/java/org/apache/commons/logging/jakarta/ServletContextCleaner.java
   1970-01-01 01:00:00.000000000 +0100
+++ 
new/commons-logging-1.4.0-src/src/main/java/org/apache/commons/logging/jakarta/ServletContextCleaner.java
   2026-06-11 22:45:24.000000000 +0200
@@ -0,0 +1,135 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      https://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.commons.logging.jakarta;
+
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
+
+import jakarta.servlet.ServletContextEvent;
+import jakarta.servlet.ServletContextListener;
+
+import org.apache.commons.logging.LogFactory;
+
+/**
+ * This class is capable of receiving notifications about the undeployment of 
a webapp, and responds by ensuring that commons-logging releases all memory
+ * associated with the undeployed webapp.
+ * <p>
+ * In general, we ensurs that logging classes do not hold references that 
prevent an undeployed webapp's memory from being garbage-collected even when 
multiple
+ * copies of commons-logging are deployed via multiple class loaders (a 
situation that earlier versions had problems with). However there are some rare 
cases
+ * where the this approach does not work; in these situations specifying this 
class as a listener for the web application will ensure that all
+ * references held by commons-logging are fully released.
+ * </p>
+ * <p>
+ * To use this class, configure the webapp deployment descriptor to call this 
class on webapp undeploy; the contextDestroyed method will tell every accessible
+ * LogFactory class that the entry in its map for the current webapp's context 
class loader should be cleared.
+ * </p>
+ *
+ * @since 1.4.0
+ */
+public class ServletContextCleaner implements ServletContextListener {
+
+    private static final Class<?>[] RELEASE_SIGNATURE = { ClassLoader.class };
+
+    /**
+     * Constructs a new instance.
+     */
+    public ServletContextCleaner() {
+        // empty
+    }
+
+    /**
+     * Invoked when a webapp is undeployed, this tells the LogFactory class to 
release any logging information related to the current contextClassloader.
+     */
+    @Override
+    public void contextDestroyed(final ServletContextEvent sce) {
+        final ClassLoader tccl = 
Thread.currentThread().getContextClassLoader();
+        final Object[] params = new Object[1];
+        params[0] = tccl;
+        // Walk up the tree of class loaders, finding all the available
+        // LogFactory classes and releasing any objects associated with
+        // the tccl (ie the webapp).
+        //
+        // When there is only one LogFactory in the classpath, and it
+        // is within the webapp being undeployed then there is no problem;
+        // garbage collection works fine.
+        //
+        // When there are multiple LogFactory classes in the classpath but
+        // parent-first classloading is used everywhere, this loop is really
+        // short. The first instance of LogFactory found will
+        // be the highest in the classpath, and then no more will be found.
+        // This is ok, as with this setup this will be the only LogFactory
+        // holding any data associated with the tccl being released.
+        //
+        // When there are multiple LogFactory classes in the classpath and
+        // child-first classloading is used in any class loader, then multiple
+        // LogFactory instances may hold info about this TCCL; whenever the
+        // webapp makes a call into a class loaded via an ancestor class loader
+        // and that class calls LogFactory the tccl gets registered in
+        // the LogFactory instance that is visible from the ancestor
+        // class loader. However the concrete logging library it points
+        // to is expected to have been loaded via the TCCL, so the7
+        // underlying logging lib is only initialized/configured once.
+        // These references from ancestor LogFactory classes down to
+        // TCCL class loaders are held via weak references and so should
+        // be released but there are circumstances where they may not.
+        // Walking up the class loader ancestry ladder releasing
+        // the current tccl at each level tree, though, will definitely
+        // clear any problem references.
+        ClassLoader loader = tccl;
+        while (loader != null) {
+            // Load via the current loader. Note that if the class is not 
accessible
+            // via this loader, but is accessible via some ancestor then that 
class
+            // will be returned.
+            try {
+                @SuppressWarnings("unchecked")
+                final Class<LogFactory> logFactoryClass = (Class<LogFactory>) 
loader.loadClass("org.apache.commons.logging.LogFactory");
+                final Method releaseMethod = 
logFactoryClass.getMethod("release", RELEASE_SIGNATURE);
+                releaseMethod.invoke(null, params);
+                loader = logFactoryClass.getClassLoader().getParent();
+            } catch (final ClassNotFoundException ex) {
+                // Neither the current class loader nor any of its ancestors 
could find
+                // the LogFactory class, so we can stop now.
+                loader = null;
+            } catch (final NoSuchMethodException ex) {
+                // This is not expected; every version of JCL has this method
+                System.err.println("LogFactory instance found which does not 
support release method!");
+                loader = null;
+            } catch (final IllegalAccessException ex) {
+                // This is not expected; every ancestor class should be 
accessible
+                System.err.println("LogFactory instance found which is not 
accessible!");
+                loader = null;
+            } catch (final InvocationTargetException ex) {
+                // This is not expected
+                System.err.println("LogFactory instance release method 
failed!");
+                loader = null;
+            }
+        }
+        // Just to be sure, invoke release on the LogFactory that is visible 
from
+        // this ServletContextCleaner class too. This should already have been 
caught
+        // by the above loop but just in case...
+        LogFactory.release(tccl);
+    }
+
+    /**
+     * Invoked when a webapp is deployed. Nothing needs to be done here.
+     */
+    @Override
+    public void contextInitialized(final ServletContextEvent sce) {
+        // do nothing
+    }
+}
Binary files 
old/commons-logging-1.3.6-src/src/media/commons-logo-component-100.xcf and 
new/commons-logging-1.4.0-src/src/media/commons-logo-component-100.xcf differ
Binary files old/commons-logging-1.3.6-src/src/media/commons-logo-component.xcf 
and new/commons-logging-1.4.0-src/src/media/commons-logo-component.xcf differ
Binary files old/commons-logging-1.3.6-src/src/media/logo.png and 
new/commons-logging-1.4.0-src/src/media/logo.png differ
Binary files old/commons-logging-1.3.6-src/src/media/logo.xcf and 
new/commons-logging-1.4.0-src/src/media/logo.xcf differ
Binary files old/commons-logging-1.3.6-src/src/site/resources/images/logo.png 
and new/commons-logging-1.4.0-src/src/site/resources/images/logo.png differ
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/commons-logging-1.3.6-src/src/site/xdoc/building.xml 
new/commons-logging-1.4.0-src/src/site/xdoc/building.xml
--- old/commons-logging-1.3.6-src/src/site/xdoc/building.xml    2026-03-05 
00:05:20.000000000 +0100
+++ new/commons-logging-1.4.0-src/src/site/xdoc/building.xml    2026-06-11 
22:45:24.000000000 +0200
@@ -58,7 +58,7 @@
   </p>
   <p>
     Further details can be found in the
-    <a href="https//commons.apache.org/building.html">commons build 
instructions</a>.
+    <a href="https://commons.apache.org/building.html";>commons build 
instructions</a>.
   </p>
 </section>
 <!-- ================================================== -->
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/commons-logging-1.3.6-src/src/site/xdoc/download_logging.xml 
new/commons-logging-1.4.0-src/src/site/xdoc/download_logging.xml
--- old/commons-logging-1.3.6-src/src/site/xdoc/download_logging.xml    
2026-03-05 00:05:20.000000000 +0100
+++ new/commons-logging-1.4.0-src/src/site/xdoc/download_logging.xml    
2026-06-11 22:45:24.000000000 +0200
@@ -115,32 +115,32 @@
       </p>
     </subsection>
     </section>
-    <section name="Apache Commons Logging 1.3.6 ">
+    <section name="Apache Commons Logging 1.4.0 ">
       <subsection name="Binaries">
         <table>
           <tr>
-              <td><a 
href="[preferred]/commons/logging/binaries/commons-logging-1.3.6-bin.tar.gz">commons-logging-1.3.6-bin.tar.gz</a></td>
-              <td><a 
href="https://downloads.apache.org/commons/logging/binaries/commons-logging-1.3.6-bin.tar.gz.sha512";>sha512</a></td>
-              <td><a 
href="https://downloads.apache.org/commons/logging/binaries/commons-logging-1.3.6-bin.tar.gz.asc";>pgp</a></td>
+              <td><a 
href="[preferred]/commons/logging/binaries/commons-logging-1.4.0-bin.tar.gz">commons-logging-1.4.0-bin.tar.gz</a></td>
+              <td><a 
href="https://downloads.apache.org/commons/logging/binaries/commons-logging-1.4.0-bin.tar.gz.sha512";>sha512</a></td>
+              <td><a 
href="https://downloads.apache.org/commons/logging/binaries/commons-logging-1.4.0-bin.tar.gz.asc";>pgp</a></td>
           </tr>
           <tr>
-              <td><a 
href="[preferred]/commons/logging/binaries/commons-logging-1.3.6-bin.zip">commons-logging-1.3.6-bin.zip</a></td>
-              <td><a 
href="https://downloads.apache.org/commons/logging/binaries/commons-logging-1.3.6-bin.zip.sha512";>sha512</a></td>
-              <td><a 
href="https://downloads.apache.org/commons/logging/binaries/commons-logging-1.3.6-bin.zip.asc";>pgp</a></td>
+              <td><a 
href="[preferred]/commons/logging/binaries/commons-logging-1.4.0-bin.zip">commons-logging-1.4.0-bin.zip</a></td>
+              <td><a 
href="https://downloads.apache.org/commons/logging/binaries/commons-logging-1.4.0-bin.zip.sha512";>sha512</a></td>
+              <td><a 
href="https://downloads.apache.org/commons/logging/binaries/commons-logging-1.4.0-bin.zip.asc";>pgp</a></td>
           </tr>
         </table>
       </subsection>
       <subsection name="Source">
         <table>
           <tr>
-              <td><a 
href="[preferred]/commons/logging/source/commons-logging-1.3.6-src.tar.gz">commons-logging-1.3.6-src.tar.gz</a></td>
-              <td><a 
href="https://downloads.apache.org/commons/logging/source/commons-logging-1.3.6-src.tar.gz.sha512";>sha512</a></td>
-              <td><a 
href="https://downloads.apache.org/commons/logging/source/commons-logging-1.3.6-src.tar.gz.asc";>pgp</a></td>
+              <td><a 
href="[preferred]/commons/logging/source/commons-logging-1.4.0-src.tar.gz">commons-logging-1.4.0-src.tar.gz</a></td>
+              <td><a 
href="https://downloads.apache.org/commons/logging/source/commons-logging-1.4.0-src.tar.gz.sha512";>sha512</a></td>
+              <td><a 
href="https://downloads.apache.org/commons/logging/source/commons-logging-1.4.0-src.tar.gz.asc";>pgp</a></td>
           </tr>
           <tr>
-              <td><a 
href="[preferred]/commons/logging/source/commons-logging-1.3.6-src.zip">commons-logging-1.3.6-src.zip</a></td>
-              <td><a 
href="https://downloads.apache.org/commons/logging/source/commons-logging-1.3.6-src.zip.sha512";>sha512</a></td>
-              <td><a 
href="https://downloads.apache.org/commons/logging/source/commons-logging-1.3.6-src.zip.asc";>pgp</a></td>
+              <td><a 
href="[preferred]/commons/logging/source/commons-logging-1.4.0-src.zip">commons-logging-1.4.0-src.zip</a></td>
+              <td><a 
href="https://downloads.apache.org/commons/logging/source/commons-logging-1.4.0-src.zip.sha512";>sha512</a></td>
+              <td><a 
href="https://downloads.apache.org/commons/logging/source/commons-logging-1.4.0-src.zip.asc";>pgp</a></td>
           </tr>
         </table>
       </subsection>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/commons-logging-1.3.6-src/src/site/xdoc/index.xml 
new/commons-logging-1.4.0-src/src/site/xdoc/index.xml
--- old/commons-logging-1.3.6-src/src/site/xdoc/index.xml       2026-03-05 
00:05:20.000000000 +0100
+++ new/commons-logging-1.4.0-src/src/site/xdoc/index.xml       2026-06-11 
22:45:24.000000000 +0200
@@ -61,13 +61,13 @@
 Release Notes</a> document the new features and bug fixes that have been
 included in the latest release.</p>
 
-<p>The <a href="https//commons.apache.org/logging/apidocs/index.html">
+<p>The <a href="https://commons.apache.org/logging/apidocs/index.html";>
 Javadoc API documents</a> for the latest release are available online.
 In particular, you should read the package overview of the 
<code>org.apache.commons.logging</code>
 package. In addition, there is a (short)
 <a href="guide.html">User Guide</a>.</p>
 
-<p>The <a href="https//wiki.apache.org/commons/Logging">Wiki site</a> has
+<p>The <a href="https://wiki.apache.org/commons/Logging";>Wiki site</a> has
 the latest updates, an FAQ, and much other useful information.</p>
 <p>
 Users needing to become experts or wanting to help develop JCL should
@@ -80,7 +80,7 @@
 <section name="Releases">
     <p>
       Binary and source distributions are available
-      <a 
href="https//commons.apache.org/proper/commons-logging/download_logging.cgi">here</a>.
+      <a 
href="https://commons.apache.org/proper/commons-logging/download_logging.cgi";>here</a>.
     </p>
     <p>
       The full release history is <a href="changes.html">here</a>.
@@ -148,7 +148,7 @@
 <section name="Development Builds">
   <p>Regular builds of the current Git <code>master</code> branch code are 
made available in the
   <a 
href="https://repository.apache.org/content/repositories/snapshots/";>snapshot 
repository</a>. See the 
-  <a href="https//wiki.apache.org/commons/Logging">wiki</a> for details.</p>
+  <a href="https://wiki.apache.org/commons/Logging";>wiki</a> for details.</p>
 </section>
 </body>
 </document>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/commons-logging-1.3.6-src/src/site/xdoc/proposal.xml 
new/commons-logging-1.4.0-src/src/site/xdoc/proposal.xml
--- old/commons-logging-1.3.6-src/src/site/xdoc/proposal.xml    2026-03-05 
00:05:20.000000000 +0100
+++ new/commons-logging-1.4.0-src/src/site/xdoc/proposal.xml    2026-06-11 
22:45:24.000000000 +0200
@@ -85,7 +85,7 @@
       is selected at runtime).</li>
   <li>Log4J (compile-time dependency only unless this Log
       implementation is selected at runtime)</li>
-  <li><a href="https//sourceforge.net/projects/lumberjack/">Lumberjack</a>
+  <li><a href="https://sourceforge.net/projects/lumberjack/";>Lumberjack</a>
       (compile-time dependency only unless this Log
       implementation is selected at runtime)</li>
 </ul>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/commons-logging-1.3.6-src/src/site/xdoc/security.xml 
new/commons-logging-1.4.0-src/src/site/xdoc/security.xml
--- old/commons-logging-1.3.6-src/src/site/xdoc/security.xml    2026-03-05 
00:05:20.000000000 +0100
+++ new/commons-logging-1.4.0-src/src/site/xdoc/security.xml    2026-06-11 
22:45:24.000000000 +0200
@@ -47,5 +47,10 @@
     <section name="Security Vulnerabilities">
       <p>None.</p>
     </section>
+    <section name="Safe Deserialization">
+      <p>
+      For information about safe deserialization, please see <a 
href="https://commons.apache.org/io/description.html#Safe_Deserialization";>Safe 
Deserialization</a>.
+      </p>
+    </section>
   </body>
 </document>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/commons-logging-1.3.6-src/src/site/xdoc/tech.xml 
new/commons-logging-1.4.0-src/src/site/xdoc/tech.xml
--- old/commons-logging-1.3.6-src/src/site/xdoc/tech.xml        2026-03-05 
00:05:20.000000000 +0100
+++ new/commons-logging-1.4.0-src/src/site/xdoc/tech.xml        2026-06-11 
22:45:24.000000000 +0200
@@ -184,10 +184,10 @@
       </p>
       <ul>
         <li>
-  posting to the <a href='https//commons.apache.org/mail-lists.html'>Apache 
Commons dev mailing list</a> or
+  posting to the <a href='https://commons.apache.org/mail-lists.html'>Apache 
Commons dev mailing list</a> or
         </li>
         <li>
-  creating an issue in <a 
href='https//issues.apache.org/jira/browse/LOGGING/'>JIRA</a>.
+  creating an issue in <a 
href='https://issues.apache.org/jira/browse/LOGGING/'>JIRA</a>.
         </li>
       </ul>
       <p>
@@ -218,7 +218,7 @@
       </subsection>
        <subsection name='Resolution Of Symbolic References'>
       <p>
-  (<a 
href='https//java.sun.com/docs/books/jls/second_edition/html/execution.doc.html#44524'>LangSpec
 12.3.3</a>)
+  (<a 
href='https://java.sun.com/docs/books/jls/second_edition/html/execution.doc.html#44524'>LangSpec
 12.3.3</a>)
   The bytecode representation of a class contains symbolic names for other 
classes referenced.
       </p>
       <p>
@@ -228,7 +228,7 @@
         </em>
       </p>
       <p>
-  (<a 
href='https//java.sun.com/docs/books/vmspec/2nd-edition/html/ConstantPool.doc.html#73492'>VMSpec
 5.4.3</a>)
+  (<a 
href='https://java.sun.com/docs/books/vmspec/2nd-edition/html/ConstantPool.doc.html#73492'>VMSpec
 5.4.3</a>)
   Resolution of a symbolic reference occurs dynamically at runtime and is 
carried out by
   the Java Virtual Machine. Resolution of a symbolic reference requires 
loading and linking of the new class.
       </p>
@@ -240,7 +240,7 @@
       </subsection>
     <subsection name='Loading'>
       <p>
-  (<a 
href='https//java.sun.com/docs/books/vmspec/2nd-edition/html/Concepts.doc.html#19175'>VMSpec
 2.17.2</a>)
+  (<a 
href='https://java.sun.com/docs/books/vmspec/2nd-edition/html/Concepts.doc.html#19175'>VMSpec
 2.17.2</a>)
   Loading is the name given to the process by which a binary form of a class 
is obtained
   by the Java Virtual Machine.
   Java classes are always loaded and linked dynamically by the Java Virtual 
Machine
@@ -257,12 +257,12 @@
       </subsection>
     <subsection name='Linking'>
       <p>
-  (<a 
href='https//java.sun.com/docs/books/vmspec/2nd-edition/html/Concepts.doc.html#22574'>VMSpec
 2.17.3</a>)
+  (<a 
href='https://java.sun.com/docs/books/vmspec/2nd-edition/html/Concepts.doc.html#22574'>VMSpec
 2.17.3</a>)
   Linking is the name used for combining the
   binary form of a class into the Java Virtual Machine. This must happen 
before the class can be used.
       </p>
       <p>
-  (<a 
href='https//java.sun.com/docs/books/vmspec/2nd-edition/html/Concepts.doc.html#22574'>VMSpec
 2.17.3</a>)
+  (<a 
href='https://java.sun.com/docs/books/vmspec/2nd-edition/html/Concepts.doc.html#22574'>VMSpec
 2.17.3</a>)
   Linking is composed of verification, preparation and resolution (of symbolic 
references).
   Flexibility is allowed over the timing of resolution. (Within limit) this 
may happen at any time after
   preparation and before that reference is used.
@@ -279,11 +279,11 @@
 
     <subsection name='Loading Classes'>
       <p>
-  (<a 
href='https//java.sun.com/docs/books/vmspec/2nd-edition/html/Concepts.doc.html#19175'>VMSpec
 2.17.2</a>)
+  (<a 
href='https://java.sun.com/docs/books/vmspec/2nd-edition/html/Concepts.doc.html#19175'>VMSpec
 2.17.2</a>)
   The loading process is performed by a <code>ClassLoader</code>.
       </p>
       <p>
-  (<a 
href='https//java.sun.com/docs/books/vmspec/2nd-edition/html/ConstantPool.doc.html#72007'>VMSpec
 5.3</a>)
+  (<a 
href='https://java.sun.com/docs/books/vmspec/2nd-edition/html/ConstantPool.doc.html#72007'>VMSpec
 5.3</a>)
   A classloader may create a class either by delegation or by defining it 
directly.
   The classloader that initiates loading of a class is known as the initiating 
loader.
   The classloader that defines the class is known as the defining loader.
@@ -298,7 +298,7 @@
 
     <subsection name='Bootstrap Classloader'>
       <p>
-  (<a 
href='https//java.sun.com/docs/books/vmspec/2nd-edition/html/ConstantPool.doc.html#72007'>VMSPEC
 5.3</a>)
+  (<a 
href='https://java.sun.com/docs/books/vmspec/2nd-edition/html/ConstantPool.doc.html#72007'>VMSPEC
 5.3</a>)
   The bootstrap is the base <code>ClassLoader</code> supplied by the Java 
Virtual Machine.
   All others are user (also known as application) <code>ClassLoader</code> 
instances.
       </p>
@@ -313,12 +313,12 @@
       </subsection>
     <subsection name='Runtime Package'>
       <p>
-  (<a 
href='https//java.sun.com/docs/books/vmspec/2nd-edition/html/ConstantPool.doc.html#72007'>VMSpec
 5.3</a>)
+  (<a 
href='https://java.sun.com/docs/books/vmspec/2nd-edition/html/ConstantPool.doc.html#72007'>VMSpec
 5.3</a>)
   At runtime, a class (or interface) is determined by its fully qualified name
   and by the classloader that defines it. This is known as the class's runtime 
package.
       </p>
       <p>
-  (<a 
href='https//java.sun.com/docs/books/vmspec/2nd-edition/html/ConstantPool.doc.html#75929'>VMSpec
 5.4.4</a>)
+  (<a 
href='https://java.sun.com/docs/books/vmspec/2nd-edition/html/ConstantPool.doc.html#75929'>VMSpec
 5.4.4</a>)
   Only classes in the same runtime package are mutually accessible.
       </p>
       <p>
@@ -335,7 +335,7 @@
 
     <subsection name='Loader Used To Resolve A Symbolic Reference'>
       <p>
-  (<a 
href='https//java.sun.com/docs/books/vmspec/2nd-edition/html/ConstantPool.doc.html#72007'>VMSpec
 5.3</a>)
+  (<a 
href='https://java.sun.com/docs/books/vmspec/2nd-edition/html/ConstantPool.doc.html#72007'>VMSpec
 5.3</a>)
   The classloader which defines the class (whose reference is being resolved) 
is the one
   used to initiate loading of the class referred to.
       </p>
@@ -353,10 +353,10 @@
     <subsection name='Bibliography'>
       <ul>
         <li>
-    <a href='https//java.sun.com/docs/books/vmspec/'>VMSpec</a> <em>The Java 
Virtual Machine Specification, Second Edition</em>
+    <a href='https://java.sun.com/docs/books/vmspec/'>VMSpec</a> <em>The Java 
Virtual Machine Specification, Second Edition</em>
         </li>
         <li>
-    <a href='https//java.sun.com/docs/books/jls/'>LangSpec</a> <em>The Java 
Language Specification, Second Edition</em>
+    <a href='https://java.sun.com/docs/books/jls/'>LangSpec</a> <em>The Java 
Language Specification, Second Edition</em>
         </li>
       </ul>
       </subsection>
@@ -444,7 +444,7 @@
     <subsection name='The Context Classloader in Container Applications'>
       <p>
   The Javadoc for
-  <a 
href="https//java.sun.com/j2se/1.5.0/docs/api/java/lang/Thread.html#setContextClassLoader(java.lang.ClassLoader)">
+  <a 
href="https://java.sun.com/j2se/1.5.0/docs/api/java/lang/Thread.html#setContextClassLoader(java.lang.ClassLoader)">
   <code>Thread.setContextClassLoader</code></a> emphasizes the setting of the
   context classloader as an aspect of thread creation.  However, in many
   applications the context classloader is not fixed at thread creation but
@@ -509,7 +509,7 @@
   Again, this will cause difficulties.
       </p>
       <p>
-  Introduced in <a href='https//java.sun.com/j2ee/j2ee-1_3-fr-spec.pdf'>Java 
J2EE 1.3</a>
+  Introduced in <a href='https://java.sun.com/j2ee/j2ee-1_3-fr-spec.pdf'>Java 
J2EE 1.3</a>
   is a requirement for vendors to appropriately set the context classloader.
   Section 6.2.4.8 (1.4 text):
       </p>
@@ -570,19 +570,19 @@
           <ul>
             <li>
               <a
-    href='https//www.onjava.com/pub/a/onjava/2001/07/25/ejb.html'>
+    href='https://www.onjava.com/pub/a/onjava/2001/07/25/ejb.html'>
   Article on J2EE class loading
               </a>
             </li>
             <li>
               <a
-    href='https//www.onjava.com/pub/a/onjava/2003/11/12/classloader.html'>
+    href='https://www.onjava.com/pub/a/onjava/2003/11/12/classloader.html'>
   Article on class loading
               </a>
             </li>
             <li>
               <a
-    
href='https//www.javaworld.com/javaworld/javaqa/2003-06/01-qa-0606-load.html'>
+    
href='https://www.javaworld.com/javaworld/javaqa/2003-06/01-qa-0606-load.html'>
   Article on context class loaders
               </a>
             </li>
@@ -592,19 +592,19 @@
           <ul>
             <li>
               <a
-    href='https//tomcat.apache.org/tomcat-4.1-doc/class-loader-howto.html'>
+    href='https://tomcat.apache.org/tomcat-4.1-doc/class-loader-howto.html'>
   Tomcat 4.1 ClassLoader Guide
               </a>
             </li>
             <li>
               <a
-    href='https//tomcat.apache.org/tomcat-5.0-doc/class-loader-howto.html'>
+    href='https://tomcat.apache.org/tomcat-5.0-doc/class-loader-howto.html'>
   Tomcat 5.0 ClassLoader Guide
               </a>
             </li>
             <li>
               <a
-href='https//publib.boulder.ibm.com/infocenter/wasinfo/v6r0/index.jsp?topic=/com.ibm.websphere.express.doc/info/exp/ae/trun_classload_web.html'>
+href='https://publib.boulder.ibm.com/infocenter/wasinfo/v6r0/index.jsp?topic=/com.ibm.websphere.express.doc/info/exp/ae/trun_classload_web.html'>
   Classloading In WebSphere
               </a>
             </li>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/commons-logging-1.3.6-src/src/site/xdoc/troubleshooting.xml 
new/commons-logging-1.4.0-src/src/site/xdoc/troubleshooting.xml
--- old/commons-logging-1.3.6-src/src/site/xdoc/troubleshooting.xml     
2026-03-05 00:05:20.000000000 +0100
+++ new/commons-logging-1.4.0-src/src/site/xdoc/troubleshooting.xml     
2026-06-11 22:45:24.000000000 +0200
@@ -288,8 +288,8 @@
  Containers known to use this mechanism:
     </p>
     <ul>
-      <li><a href='https//www.ibm.com/software/websphere/'>WebSphere 
Application Server</a> from
-      <a href='https//www.ibm.com/software/websphere/'>IBM</a> (versions 5 and 
6).</li>
+      <li><a href='https://www.ibm.com/software/websphere/'>WebSphere 
Application Server</a> from
+      <a href='https://www.ibm.com/software/websphere/'>IBM</a> (versions 5 
and 6).</li>
     </ul>
     <p>
  Containers suspected to use this mechanism:
@@ -312,10 +312,10 @@
   implementation should be used but Class 
'com.ibm.ws.commons.logging.TrLogFactory' cannot be converted 
   to 'org.apache.commons.logging.LogFactory'. The conflict is caused by the 
presence of multiple 
   LogFactory classes in incompatible classloaders. Background can be found in 
-  https//commons.apache.org/logging/tech.html. If you have not explicitly 
specified a custom
+  https://commons.apache.org/logging/tech.html. If you have not explicitly 
specified a custom
   LogFactory then it is likely that the container has set one without your 
knowledge. 
   In this case, consider using the commons-logging-adapters.jar file or 
specifying the standard 
-  LogFactory from the command line. Help can be found 
@https//commons.apache.org/logging.
+  LogFactory from the command line. Help can be found 
@https://commons.apache.org/logging.
   </code>
         <p>
   This is a WebSphere example so the name of the custom LogFactory is 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/commons-logging-1.3.6-src/src/test/java/org/apache/commons/logging/servlet/BasicJakartaServletTestCase.java
 
new/commons-logging-1.4.0-src/src/test/java/org/apache/commons/logging/servlet/BasicJakartaServletTestCase.java
--- 
old/commons-logging-1.3.6-src/src/test/java/org/apache/commons/logging/servlet/BasicJakartaServletTestCase.java
     1970-01-01 01:00:00.000000000 +0100
+++ 
new/commons-logging-1.4.0-src/src/test/java/org/apache/commons/logging/servlet/BasicJakartaServletTestCase.java
     2026-06-11 22:45:24.000000000 +0200
@@ -0,0 +1,70 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      https://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.commons.logging.servlet;
+
+import junit.framework.Test;
+import junit.framework.TestCase;
+
+import org.apache.commons.logging.PathableClassLoader;
+import org.apache.commons.logging.PathableTestSuite;
+import org.apache.commons.logging.jakarta.ServletContextCleaner;
+
+/**
+ * Tests for ServletContextCleaner utility class.
+ */
+public class BasicJakartaServletTestCase extends TestCase {
+
+    /**
+     * Return the tests included in this test suite.
+     */
+    public static Test suite() throws Exception {
+        // LogFactory in parent
+        // LogFactory in child (loads test)
+        // LogFactory in tccl
+        //
+        // Having the test loaded via a loader above the tccl emulates the 
situation
+        // where a web.xml file specifies ServletContextCleaner as a listener, 
and
+        // that class is deployed via a shared class loader.
+
+        final PathableClassLoader parent = new PathableClassLoader(null);
+        parent.useExplicitLoader("junit.", Test.class.getClassLoader());
+        parent.addLogicalLib("commons-logging");
+        parent.addLogicalLib("jakarta-servlet-api");
+
+        final PathableClassLoader child = new PathableClassLoader(parent);
+        child.setParentFirst(false);
+        child.addLogicalLib("commons-logging");
+        child.addLogicalLib("testclasses");
+
+        final PathableClassLoader tccl = new PathableClassLoader(child);
+        tccl.setParentFirst(false);
+        tccl.addLogicalLib("commons-logging");
+
+        final Class<?> testClass = 
child.loadClass(BasicJakartaServletTestCase.class.getName());
+        return new PathableTestSuite(testClass, tccl);
+    }
+
+    /**
+     * Test that calling ServletContextCleaner.contextDestroyed doesn't crash.
+     * Testing anything else is rather difficult...
+     */
+    public void testBasics() {
+        final ServletContextCleaner scc = new ServletContextCleaner();
+        scc.contextDestroyed(null);
+    }
+}

Reply via email to