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();
     }

Reply via email to