This is an automated email from the ASF dual-hosted git repository.
cstamas pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/maven-shade-plugin.git
The following commit(s) were added to refs/heads/master by this push:
new 397b2cd Drop excessive dependencies (#786)
397b2cd is described below
commit 397b2cd7a6315cc9f0ce14b87d6a9108edee25b1
Author: Tamas Cservenak <[email protected]>
AuthorDate: Thu Feb 26 18:41:28 2026 +0100
Drop excessive dependencies (#786)
This plugin drags TOO MUCH just for too few things. Drop them.
This PR drops:
* commons-compress w/ transitive deps
* commons-io (makes it test)
Dropped A LOT of transitive deps:
https://gist.github.com/cstamas/57755aeef69d71f8b7bc88a584c8c524
Result: 3.9MiB vs 1.4MiB
---
pom.xml | 78 ++++++++++------------
.../apache/maven/plugins/shade/DefaultShader.java | 51 +++++++++-----
.../resource/ServicesResourceTransformer.java | 4 +-
.../resource/SisuIndexResourceTransformer.java | 4 +-
4 files changed, 73 insertions(+), 64 deletions(-)
diff --git a/pom.xml b/pom.xml
index a04591e..7ad0742 100644
--- a/pom.xml
+++ b/pom.xml
@@ -88,7 +88,34 @@
</properties>
<dependencies>
- <!-- Maven -->
+ <!-- Needed dependencies -->
+ <dependency>
+ <groupId>org.ow2.asm</groupId>
+ <artifactId>asm</artifactId>
+ <version>${asmVersion}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.ow2.asm</groupId>
+ <artifactId>asm-commons</artifactId>
+ <version>${asmVersion}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.jdom</groupId>
+ <artifactId>jdom2</artifactId>
+ <version>2.0.6.1</version>
+ </dependency>
+ <dependency>
+ <groupId>org.vafer</groupId>
+ <artifactId>jdependency</artifactId>
+ <version>2.15</version>
+ </dependency>
+ <dependency>
+ <groupId>org.codehaus.plexus</groupId>
+ <artifactId>plexus-utils</artifactId>
+ <version>3.6.0</version>
+ </dependency>
+
+ <!-- Maven (provided) -->
<dependency>
<groupId>org.apache.maven</groupId>
<artifactId>maven-plugin-api</artifactId>
@@ -119,58 +146,17 @@
<version>3.15.2</version>
<scope>provided</scope>
</dependency>
-
- <!-- Plexus -->
- <dependency>
- <groupId>org.codehaus.plexus</groupId>
- <artifactId>plexus-utils</artifactId>
- <version>3.6.0</version>
- </dependency>
-
- <!-- DI -->
<dependency>
<groupId>javax.inject</groupId>
<artifactId>javax.inject</artifactId>
<version>1</version>
<scope>provided</scope>
</dependency>
-
- <!-- Others -->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>${slf4j.version}</version>
- </dependency>
- <dependency>
- <groupId>org.ow2.asm</groupId>
- <artifactId>asm</artifactId>
- <version>${asmVersion}</version>
- </dependency>
- <dependency>
- <groupId>org.ow2.asm</groupId>
- <artifactId>asm-commons</artifactId>
- <version>${asmVersion}</version>
- </dependency>
-
- <dependency>
- <groupId>org.jdom</groupId>
- <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>
- <version>2.15</version>
+ <scope>provided</scope>
</dependency>
<!-- Test -->
@@ -228,6 +214,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();
}