Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package plexus-resources for openSUSE:Factory checked in at 2026-11-06 19:58:48 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/plexus-resources (Old) and /work/SRC/openSUSE:Factory/.plexus-resources.new.3759290 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "plexus-resources" Fri Nov 6 19:58:48 2026 rev:9 rq:1395849 version:1.4.1 Changes: -------- --- /work/SRC/openSUSE:Factory/plexus-resources/plexus-resources.changes 2026-09-29 17:51:00.762296119 +0200 +++ /work/SRC/openSUSE:Factory/.plexus-resources.new.3759290/plexus-resources.changes 2026-11-06 20:07:11.078395994 +0100 @@ -1,0 +2,22 @@ +Fri Nov 6 13:07:22 UTC 2026 - Fridrich Strba <[email protected]> + +- Update to version 1.4.1 + * Bug Fixes + + Read jar resources without the JVM jar: cache + * Documentation updates + + Drop the Source Xref menu item + + Stop pinning a version in the README snippet + * Maintenance + + Keep plexus-xml on 3.x in Dependabot + + Drop the Source Xref menu item + + Draft the version the labels imply, not always a patch + * Build + + Allow running the release drafter by hand + + Keep Dependabot off Mockito 5 + + Point the SCM URLs at HTTPS + + Draft the version the labels imply, not always a patch + * Dependency updates + + Bump release-drafter/release-drafter from 7.7.0 to 7.10.0 + + Keep plexus-xml on 3.x in Dependabot + +------------------------------------------------------------------- Old: ---- plexus-resources-1.4.0.tar.xz New: ---- plexus-resources-1.4.1.tar.xz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ plexus-resources.spec ++++++ --- /var/tmp/diff_new_pack.4ygqa9/_old 2026-11-06 20:07:12.282446452 +0100 +++ /var/tmp/diff_new_pack.4ygqa9/_new 2026-11-06 20:07:12.284446536 +0100 @@ -17,7 +17,7 @@ Name: plexus-resources -Version: 1.4.0 +Version: 1.4.1 Release: 0 Summary: Plexus Resource Manager License: MIT ++++++ _scmsync.obsinfo ++++++ --- /var/tmp/diff_new_pack.4ygqa9/_old 2026-11-06 20:07:12.369450098 +0100 +++ /var/tmp/diff_new_pack.4ygqa9/_new 2026-11-06 20:07:12.380450559 +0100 @@ -1,6 +1,6 @@ -mtime: 1790601636 -commit: fda0a257b9a922b5f806555c12f36b33d616e4a359e16a660e5603a25ec39c72 +mtime: 1793970667 +commit: 7d30c72157cbc7444b3e8251c43915f92c67d9d073f7965107ca0d6e0a0b14b8 url: https://src.opensuse.org/java-packages/plexus-resources -revision: fda0a257b9a922b5f806555c12f36b33d616e4a359e16a660e5603a25ec39c72 +revision: 7d30c72157cbc7444b3e8251c43915f92c67d9d073f7965107ca0d6e0a0b14b8 projectscmsync: https://src.opensuse.org/java-packages/_ObsPrj ++++++ _service ++++++ --- /var/tmp/diff_new_pack.4ygqa9/_old 2026-11-06 20:07:12.432452738 +0100 +++ /var/tmp/diff_new_pack.4ygqa9/_new 2026-11-06 20:07:12.438452990 +0100 @@ -2,7 +2,7 @@ <service name="tar_scm" mode="disabled"> <param name="scm">git</param> <param name="url">https://github.com/codehaus-plexus/plexus-resources.git</param> - <param name="revision">plexus-resources-1.4.0</param> + <param name="revision">plexus-resources-1.4.1</param> <param name="match-tag">plexus-resources-*</param> <param name="versionformat">@PARENT_TAG@</param> <param name="versionrewrite-pattern">plexus-resources-(.*)</param> ++++++ 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-11-06 14:11:07.000000000 +0100 @@ -0,0 +1 @@ +.osc ++++++ plexus-resources-1.4.0.tar.xz -> plexus-resources-1.4.1.tar.xz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/plexus-resources-1.4.0/.github/dependabot.yml new/plexus-resources-1.4.1/.github/dependabot.yml --- old/plexus-resources-1.4.0/.github/dependabot.yml 2026-08-19 17:58:12.000000000 +0200 +++ new/plexus-resources-1.4.1/.github/dependabot.yml 2026-11-06 11:38:18.000000000 +0100 @@ -4,6 +4,13 @@ directory: "/" schedule: interval: "daily" + ignore: + # plexus-xml 4.x depends on the Maven 4 XML API + - dependency-name: "org.codehaus.plexus:plexus-xml" + versions: [">= 4.0.0"] + # Mockito 5 requires Java 11; the build still runs on JDK 8 + - dependency-name: "org.mockito:*" + versions: [">= 5.0.0"] - package-ecosystem: "github-actions" directory: "/" schedule: diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/plexus-resources-1.4.0/.github/release-drafter.yml new/plexus-resources-1.4.1/.github/release-drafter.yml --- old/plexus-resources-1.4.0/.github/release-drafter.yml 1970-01-01 01:00:00.000000000 +0100 +++ new/plexus-resources-1.4.1/.github/release-drafter.yml 2026-11-06 11:38:18.000000000 +0100 @@ -0,0 +1,10 @@ +# Configuration for Release Drafter: https://github.com/release-drafter/release-drafter +# Categories, labels and the version-resolver come from the shared org config. +_extends: .github + +# Tags here are prefixed, so tag-prefix is what lets the drafter parse the +# version out of the last tag. Without it the drafter reads what it can from the +# tag string, and plexus-i18n once drafted 18.0.1 by finding the 18 in its name. +tag-prefix: plexus-resources- +tag-template: plexus-resources-$RESOLVED_VERSION +name-template: $RESOLVED_VERSION diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/plexus-resources-1.4.0/.github/workflows/maven.yml new/plexus-resources-1.4.1/.github/workflows/maven.yml --- old/plexus-resources-1.4.0/.github/workflows/maven.yml 2026-08-19 17:58:12.000000000 +0200 +++ new/plexus-resources-1.4.1/.github/workflows/maven.yml 2026-11-06 11:38:18.000000000 +0100 @@ -17,7 +17,7 @@ name: GitHub CI -on: [push, pull_request] +on: [push, pull_request, workflow_dispatch] jobs: build: diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/plexus-resources-1.4.0/.github/workflows/release-drafter.yml new/plexus-resources-1.4.1/.github/workflows/release-drafter.yml --- old/plexus-resources-1.4.0/.github/workflows/release-drafter.yml 2026-08-19 17:58:12.000000000 +0200 +++ new/plexus-resources-1.4.1/.github/workflows/release-drafter.yml 2026-11-06 11:38:18.000000000 +0100 @@ -3,10 +3,11 @@ push: branches: - master + workflow_dispatch: jobs: update_release_draft: runs-on: ubuntu-latest steps: - - uses: release-drafter/[email protected] + - uses: release-drafter/[email protected] env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/plexus-resources-1.4.0/README.md new/plexus-resources-1.4.1/README.md --- old/plexus-resources-1.4.0/README.md 2026-08-19 17:58:12.000000000 +0200 +++ new/plexus-resources-1.4.1/README.md 2026-11-06 11:38:18.000000000 +0100 @@ -22,7 +22,6 @@ <dependency> <groupId>org.codehaus.plexus</groupId> <artifactId>plexus-resources</artifactId> - <version>1.3.1</version> </dependency> ``` @@ -38,6 +37,8 @@ File file = resourceManager.getResourceAsFile( "checkstyle.xml" ); ``` +Check the badge above for the current version. + `getResourceAsFile` will materialise a temporary file when the resource is not already one, so it works for classpath and URL resources too. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/plexus-resources-1.4.0/pom.xml new/plexus-resources-1.4.1/pom.xml --- old/plexus-resources-1.4.0/pom.xml 2026-08-19 17:58:12.000000000 +0200 +++ new/plexus-resources-1.4.1/pom.xml 2026-11-06 11:38:18.000000000 +0100 @@ -10,15 +10,15 @@ </parent> <artifactId>plexus-resources</artifactId> - <version>1.4.0</version> + <version>1.4.1</version> <name>Plexus Resource Component</name> <description>A component to transparently retrieve resources from the filesystem, classpath or internet.</description> <scm> - <connection>scm:git:[email protected]:codehaus-plexus/plexus-resources.git</connection> - <developerConnection>scm:git:[email protected]:codehaus-plexus/plexus-resources.git</developerConnection> - <tag>plexus-resources-1.4.0</tag> + <connection>scm:git:https://github.com/codehaus-plexus/plexus-resources.git</connection> + <developerConnection>${project.scm.connection}</developerConnection> + <tag>plexus-resources-1.4.1</tag> <url>http://github.com/codehaus-plexus/plexus-resources</url> </scm> <issueManagement> @@ -33,7 +33,7 @@ </distributionManagement> <properties> - <project.build.outputTimestamp>2026-08-19T15:58:07Z</project.build.outputTimestamp> + <project.build.outputTimestamp>2026-11-06T10:38:12Z</project.build.outputTimestamp> <mockito.version>4.11.0</mockito.version> </properties> diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/plexus-resources-1.4.0/src/main/java/org/codehaus/plexus/resource/loader/JarHolder.java new/plexus-resources-1.4.1/src/main/java/org/codehaus/plexus/resource/loader/JarHolder.java --- old/plexus-resources-1.4.0/src/main/java/org/codehaus/plexus/resource/loader/JarHolder.java 2026-08-19 17:58:12.000000000 +0200 +++ new/plexus-resources-1.4.1/src/main/java/org/codehaus/plexus/resource/loader/JarHolder.java 2026-11-06 11:38:18.000000000 +0100 @@ -30,8 +30,12 @@ import java.net.JarURLConnection; import java.net.URI; import java.net.URL; +import java.net.URLConnection; +import java.util.Collections; import java.util.Enumeration; import java.util.Hashtable; +import java.util.LinkedHashSet; +import java.util.Set; import java.util.jar.JarEntry; import java.util.jar.JarFile; @@ -47,72 +51,63 @@ public class JarHolder { private final String urlpath; - private JarFile theJar = null; - - private JarURLConnection conn = null; + private final Set<String> entries; public JarHolder(String urlpath) { this.urlpath = urlpath; - try { - URL url = new URL(urlpath); - - conn = (JarURLConnection) url.openConnection(); - - conn.setAllowUserInteraction(false); - - conn.setDoInput(true); - - conn.setDoOutput(false); - - conn.connect(); + Set<String> names = Collections.emptySet(); + // The jar is indexed once and every resource is read from a connection of its own, all without the + // JVM-wide jar: cache: a cached JarFile is never closed, so the jar stays locked on Windows and is read + // stale once it is rewritten (JDK-8239054). + try (JarFile jar = openJar(new URL(urlpath))) { + names = new LinkedHashSet<>(); + Enumeration<JarEntry> all = jar.entries(); + while (all.hasMoreElements()) { + JarEntry je = all.nextElement(); - theJar = conn.getJarFile(); + // We don't map plain directory entries + if (!je.isDirectory()) { + names.add(je.getName()); + } + } } catch (IOException ioe) { } + this.entries = names; } - public void close() { - try { - theJar.close(); - } catch (Exception e) { - } - - theJar = null; + private static JarFile openJar(URL url) throws IOException { + JarURLConnection conn = (JarURLConnection) url.openConnection(); + conn.setUseCaches(false); + return conn.getJarFile(); + } - conn = null; + private InputStream openEntry(String name) throws IOException { + URLConnection conn = new URL(urlpath + name).openConnection(); + conn.setUseCaches(false); + return conn.getInputStream(); } - public InputStream getResource(String theentry) throws ResourceNotFoundException { - InputStream data = null; + /** + * Kept for compatibility: the jar is no longer held open, so there is nothing to close. + */ + public void close() {} + public InputStream getResource(String theentry) throws ResourceNotFoundException { + if (!entries.contains(theentry)) { + return null; + } try { - JarEntry entry = theJar.getJarEntry(theentry); - - if (entry != null) { - data = theJar.getInputStream(entry); - } + return openEntry(theentry); } catch (Exception fnfe) { throw new ResourceNotFoundException(fnfe.getMessage()); } - - return data; } public Hashtable<String, String> getEntries() { Hashtable<String, String> allEntries = new Hashtable<>(559); - - if (theJar != null) { - Enumeration<JarEntry> all = theJar.entries(); - - while (all.hasMoreElements()) { - JarEntry je = all.nextElement(); - - // We don't map plain directory entries - if (!je.isDirectory()) { - allEntries.put(je.getName(), this.urlpath); - } - } + for (String name : entries) { + allEntries.put(name, this.urlpath); } return allEntries; } @@ -122,8 +117,7 @@ } public PlexusResource getPlexusResource(final String name) { - final JarEntry entry = theJar.getJarEntry(name); - if (entry == null) { + if (!entries.contains(name)) { return null; } return new PlexusResource() { @@ -134,12 +128,12 @@ @Override public InputStream getInputStream() throws IOException { - return theJar.getInputStream(entry); + return openEntry(name); } @Override public String getName() { - return conn.getURL() + name; + return urlpath + name; } @Override @@ -149,7 +143,7 @@ @Override public URL getURL() throws IOException { - return new URL(conn.getJarFileURL(), name); + return new URL(urlpath + name); } }; } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/plexus-resources-1.4.0/src/site/site.xml new/plexus-resources-1.4.1/src/site/site.xml --- old/plexus-resources-1.4.0/src/site/site.xml 2026-08-19 17:58:12.000000000 +0200 +++ new/plexus-resources-1.4.1/src/site/site.xml 2026-11-06 11:38:18.000000000 +0100 @@ -25,7 +25,6 @@ <menu name="Overview"> <item name="Introduction" href="index.html"/> <item name="JavaDocs" href="apidocs/index.html"/> - <item name="Source Xref" href="xref/index.html"/> <!--item name="FAQ" href="faq.html"/--> </menu> diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/plexus-resources-1.4.0/src/test/java/org/codehaus/plexus/resource/loader/JarResourceLoaderTest.java new/plexus-resources-1.4.1/src/test/java/org/codehaus/plexus/resource/loader/JarResourceLoaderTest.java --- old/plexus-resources-1.4.0/src/test/java/org/codehaus/plexus/resource/loader/JarResourceLoaderTest.java 1970-01-01 01:00:00.000000000 +0100 +++ new/plexus-resources-1.4.1/src/test/java/org/codehaus/plexus/resource/loader/JarResourceLoaderTest.java 2026-11-06 11:38:18.000000000 +0100 @@ -0,0 +1,72 @@ +package org.codehaus.plexus.resource.loader; + +import java.io.ByteArrayOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; +import java.nio.charset.StandardCharsets; +import java.nio.file.Files; +import java.nio.file.Path; +import java.util.jar.JarOutputStream; +import java.util.zip.ZipEntry; + +import org.codehaus.plexus.resource.PlexusResource; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.io.TempDir; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +class JarResourceLoaderTest { + @TempDir + Path tempDir; + + @Test + void readsRewrittenJar() throws Exception { + Path jar = tempDir.resolve("resources.jar"); + writeJar(jar, "first"); + assertEquals("first", read(jar)); + + // Rewritten in place, as a reactor module or a reinstalled artifact is. + writeJar(jar, "second, and longer than the first"); + assertEquals("second, and longer than the first", read(jar)); + + // The jar is not held open, so it can be deleted (fails on Windows while it is). + Files.delete(jar); + } + + @Test + void urlPointsIntoJar() throws Exception { + Path jar = tempDir.resolve("resources.jar"); + writeJar(jar, "content"); + assertEquals( + "jar:" + jar.toUri() + "!/config/rules.txt", + resource(jar).getURL().toString()); + } + + private static PlexusResource resource(Path jar) throws Exception { + JarResourceLoader loader = new JarResourceLoader(); + loader.addSearchPath("jar:" + jar.toUri()); + return loader.getResource("config/rules.txt"); + } + + private static String read(Path jar) throws Exception { + PlexusResource resource = resource(jar); + try (InputStream in = resource.getInputStream()) { + ByteArrayOutputStream bytes = new ByteArrayOutputStream(); + byte[] buffer = new byte[256]; + for (int n; (n = in.read(buffer)) != -1; ) { + bytes.write(buffer, 0, n); + } + return new String(bytes.toByteArray(), StandardCharsets.UTF_8); + } + } + + private static void writeJar(Path jar, String content) throws IOException { + try (OutputStream out = Files.newOutputStream(jar); + JarOutputStream jarOut = new JarOutputStream(out)) { + jarOut.putNextEntry(new ZipEntry("config/rules.txt")); + jarOut.write(content.getBytes(StandardCharsets.UTF_8)); + jarOut.closeEntry(); + } + } +} ++++++ plexus-resources-build.xml ++++++ --- /var/tmp/diff_new_pack.4ygqa9/_old 2026-11-06 20:07:12.921473232 +0100 +++ /var/tmp/diff_new_pack.4ygqa9/_new 2026-11-06 20:07:12.930473609 +0100 @@ -10,7 +10,7 @@ <property name="project.groupId" value="org.codehaus.plexus"/> <property name="project.artifactId" value="plexus-resources"/> - <property name="project.version" value="1.4.0"/> + <property name="project.version" value="1.4.1"/> <property name="compiler.release" value="8"/> <property name="compiler.source" value="1.${compiler.release}"/>
