diff --git a/asconfigc/pom.xml b/asconfigc/pom.xml
index 0a74337ef..ccf948ec1 100644
--- a/asconfigc/pom.xml
+++ b/asconfigc/pom.xml
@@ -110,6 +110,11 @@ limitations under the License.
json-schema-validator
1.5.6
+
+ org.apache.commons
+ commons-compress
+ 1.27.1
+
org.slf4j
slf4j-nop
diff --git a/asconfigc/src/main/java/com/as3mxml/asconfigc/ASConfigC.java b/asconfigc/src/main/java/com/as3mxml/asconfigc/ASConfigC.java
index 8114d8197..cc5bef915 100644
--- a/asconfigc/src/main/java/com/as3mxml/asconfigc/ASConfigC.java
+++ b/asconfigc/src/main/java/com/as3mxml/asconfigc/ASConfigC.java
@@ -47,8 +47,9 @@
import java.util.Set;
import java.util.regex.Pattern;
import java.util.stream.Collectors;
-import java.util.zip.ZipEntry;
-import java.util.zip.ZipFile;
+
+import org.apache.commons.compress.archivers.zip.ZipArchiveEntry;
+import org.apache.commons.compress.archivers.zip.ZipFile;
import org.apache.commons.cli.CommandLine;
import org.apache.commons.cli.CommandLineParser;
@@ -1260,10 +1261,10 @@ private void unpackANE(File aneFile) throws ASConfigCException {
}
try {
- ZipFile zipFile = new ZipFile(aneFile);
- Enumeration> zipEntries = zipFile.entries();
+ ZipFile zipFile = ZipFile.builder().setFile(aneFile).get();
+ Enumeration> zipEntries = zipFile.getEntries();
while (zipEntries.hasMoreElements()) {
- ZipEntry zipEntry = (ZipEntry) zipEntries.nextElement();
+ ZipArchiveEntry zipEntry = (ZipArchiveEntry) zipEntries.nextElement();
if (zipEntry.isDirectory()) {
continue;
}
@@ -1272,6 +1273,18 @@ private void unpackANE(File aneFile) throws ASConfigCException {
File destParent = new File(destFile.getParent());
destParent.mkdirs();
+ if (zipEntry.isUnixSymlink()) {
+ Path link = destFile.toPath();
+ Path target = Paths.get(zipFile.getUnixSymlink(zipEntry));
+ try {
+ Files.createSymbolicLink(link, target);
+ continue;
+ } catch (Exception e) {
+ System.out.println("Failed to create symbolic link: " + currentAneDirectory.toPath().relativize(link)
+ + " -> " + target + ", will write as regular file instead." );
+ }
+ }
+
BufferedInputStream inStream = new BufferedInputStream(zipFile.getInputStream(zipEntry));
FileOutputStream fileOutStream = new FileOutputStream(destFile);
byte buffer[] = new byte[2048];
diff --git a/distribution/src/assembly/bin.xml b/distribution/src/assembly/bin.xml
index 2b223fc81..3b5419a50 100644
--- a/distribution/src/assembly/bin.xml
+++ b/distribution/src/assembly/bin.xml
@@ -60,6 +60,8 @@
asconfigc*.jar
commons-cli*.jar
+ commons-compress-*.jar
+ commons-io-*.jar
commons-lang*.jar