This is an automated email from the ASF dual-hosted git repository. cstamas pushed a commit to branch drop-deps in repository https://gitbox.apache.org/repos/asf/maven-shade-plugin.git
commit e0b12152a62aed72e98327238042df398c4367b2 Author: Tamas Cservenak <[email protected]> AuthorDate: Thu Feb 26 17:22:50 2026 +0100 Drop excessive dependencies This plugin drags TOO MUCH just for too few things. Drop them. --- pom.xml | 16 +++---- .../apache/maven/plugins/shade/DefaultShader.java | 51 ++++++++++++++-------- .../resource/ServicesResourceTransformer.java | 4 +- .../resource/SisuIndexResourceTransformer.java | 4 +- 4 files changed, 44 insertions(+), 31 deletions(-) diff --git a/pom.xml b/pom.xml index a04591e..322f0c0 100644 --- a/pom.xml +++ b/pom.xml @@ -157,16 +157,6 @@ <artifactId>jdom2</artifactId> <version>2.0.6.1</version> </dependency> - <dependency> - <groupId>org.apache.commons</groupId> - <artifactId>commons-compress</artifactId> - <version>1.28.0</version> - </dependency> - <dependency> - <groupId>commons-io</groupId> - <artifactId>commons-io</artifactId> - <version>2.21.0</version> - </dependency> <dependency> <groupId>org.vafer</groupId> <artifactId>jdependency</artifactId> @@ -228,6 +218,12 @@ <version>3.5.1</version> <scope>test</scope> </dependency> + <dependency> + <groupId>commons-io</groupId> + <artifactId>commons-io</artifactId> + <version>2.21.0</version> + <scope>test</scope> + </dependency> </dependencies> <build> diff --git a/src/main/java/org/apache/maven/plugins/shade/DefaultShader.java b/src/main/java/org/apache/maven/plugins/shade/DefaultShader.java index 5400b42..d4f9967 100644 --- a/src/main/java/org/apache/maven/plugins/shade/DefaultShader.java +++ b/src/main/java/org/apache/maven/plugins/shade/DefaultShader.java @@ -30,6 +30,8 @@ import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.io.PushbackInputStream; import java.io.Writer; +import java.nio.ByteBuffer; +import java.nio.ByteOrder; import java.nio.charset.StandardCharsets; import java.nio.file.Files; import java.util.ArrayList; @@ -56,9 +58,6 @@ import java.util.zip.CRC32; import java.util.zip.ZipEntry; import java.util.zip.ZipException; -import org.apache.commons.compress.archivers.zip.ExtraFieldUtils; -import org.apache.commons.compress.archivers.zip.X5455_ExtendedTimestamp; -import org.apache.commons.compress.archivers.zip.ZipExtraField; import org.apache.maven.plugin.MojoExecutionException; import org.apache.maven.plugins.shade.filter.Filter; import org.apache.maven.plugins.shade.relocation.Relocator; @@ -95,23 +94,41 @@ public class DefaultShader implements Shader { // workaround for MSHADE-420 private long getTime(ZipEntry entry) { - if (entry.getExtra() != null) { - try { - ZipExtraField[] fields = - ExtraFieldUtils.parse(entry.getExtra(), true, ExtraFieldUtils.UnparseableExtraField.SKIP); - for (ZipExtraField field : fields) { - if (X5455_ExtendedTimestamp.HEADER_ID.equals(field.getHeaderId())) { - // extended timestamp extra field: need to translate UTC to local time for Reproducible Builds - Calendar cal = Calendar.getInstance(); - cal.setTimeInMillis(entry.getTime()); - return entry.getTime() - (cal.get(Calendar.ZONE_OFFSET) + cal.get(Calendar.DST_OFFSET)); - } + if (entry.getLastModifiedTime() == null) { + return -1; + } + long mtime = entry.getLastModifiedTime().toMillis(); + if (hasX5455ExtendedTimestamp(entry)) { + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(mtime); + mtime = mtime - (cal.get(Calendar.ZONE_OFFSET) + cal.get(Calendar.DST_OFFSET)); + } + return mtime; + } + + /** + * Returns {@code true} if passed in {@link ZipEntry} has extra data that contains the extended timestamp (0x5455). + * + * @see <a href="https://commons.apache.org/proper/commons-compress/apidocs/org/apache/commons/compress/archivers/zip/X5455_ExtendedTimestamp.html">X5455_ExtendedTimestamp</a> + */ + private static boolean hasX5455ExtendedTimestamp(ZipEntry zipEntry) { + if (zipEntry.getExtra() != null) { + ByteBuffer extraData = ByteBuffer.wrap(zipEntry.getExtra()); + extraData.order(ByteOrder.LITTLE_ENDIAN); + while (extraData.hasRemaining()) { + int id = extraData.getShort() & 0xffff; + int length = extraData.getShort() & 0xffff; + + if (id == 0x5455) { + // Extended TS is present + return true; + } else { + // skip to next + extraData.position(extraData.position() + length); } - } catch (ZipException ze) { - // ignore } } - return entry.getTime(); + return false; } public void shade(ShadeRequest shadeRequest) throws IOException, MojoExecutionException { diff --git a/src/main/java/org/apache/maven/plugins/shade/resource/ServicesResourceTransformer.java b/src/main/java/org/apache/maven/plugins/shade/resource/ServicesResourceTransformer.java index 9b354dd..ec8f521 100644 --- a/src/main/java/org/apache/maven/plugins/shade/resource/ServicesResourceTransformer.java +++ b/src/main/java/org/apache/maven/plugins/shade/resource/ServicesResourceTransformer.java @@ -30,8 +30,8 @@ import java.util.Set; import java.util.jar.JarEntry; import java.util.jar.JarOutputStream; -import org.apache.commons.io.IOUtils; import org.apache.maven.plugins.shade.relocation.Relocator; +import org.codehaus.plexus.util.IOUtil; /** * Resources transformer that relocates classes in META-INF/services and appends entries in META-INF/services resources @@ -97,7 +97,7 @@ public class ServicesResourceTransformer extends AbstractCompatibilityTransforme jarEntry.setTime(time); jos.putNextEntry(jarEntry); - IOUtils.writeLines(data, "\n", jos, StandardCharsets.UTF_8); + IOUtil.copy((String.join("\n", data) + "\n").getBytes(StandardCharsets.UTF_8), jos); jos.flush(); data.clear(); } diff --git a/src/main/java/org/apache/maven/plugins/shade/resource/SisuIndexResourceTransformer.java b/src/main/java/org/apache/maven/plugins/shade/resource/SisuIndexResourceTransformer.java index 380acbe..ac4cbc2 100644 --- a/src/main/java/org/apache/maven/plugins/shade/resource/SisuIndexResourceTransformer.java +++ b/src/main/java/org/apache/maven/plugins/shade/resource/SisuIndexResourceTransformer.java @@ -27,8 +27,8 @@ import java.util.Scanner; import java.util.jar.JarEntry; import java.util.jar.JarOutputStream; -import org.apache.commons.io.IOUtils; import org.apache.maven.plugins.shade.relocation.Relocator; +import org.codehaus.plexus.util.IOUtil; /** * Resource transformer that relocates classes in {@code META-INF/sisu/javax.inject.Named} and appends resources @@ -78,7 +78,7 @@ public class SisuIndexResourceTransformer extends AbstractCompatibilityTransform JarEntry jarEntry = new JarEntry(SISU_INDEX_PATH); jarEntry.setTime(time); jos.putNextEntry(jarEntry); - IOUtils.writeLines(indexEntries, "\n", jos, StandardCharsets.UTF_8); + IOUtil.copy((String.join("\n", indexEntries) + "\n").getBytes(StandardCharsets.UTF_8), jos); jos.flush(); indexEntries.clear(); }
