Reorganized code a bit in an attempt to avoid class loading issues while loading ivy settings.

This commit is contained in:
Maarten Coene 2025-04-29 23:21:51 +02:00
parent 05fdc916fb
commit ec7b728251
No known key found for this signature in database
GPG Key ID: 5BE0BA8CB80602AE
4 changed files with 48 additions and 19 deletions

View File

@ -20,7 +20,7 @@
#This file defines the sources to compile for ivy-optional.jar #This file defines the sources to compile for ivy-optional.jar
org/apache/ivy/Main.java org/apache/ivy/Main.java
org/apache/ivy/plugins/matcher/GlobPatternMatcher.java org/apache/ivy/plugins/matcher/GlobPatternMatcher.java
org/apache/ivy/plugins/pack/Pack200Packing.java org/apache/ivy/plugins/pack/Pack200*.java
org/apache/ivy/plugins/repository/sftp/**/*.java org/apache/ivy/plugins/repository/sftp/**/*.java
org/apache/ivy/plugins/repository/ssh/**/*.java org/apache/ivy/plugins/repository/ssh/**/*.java
org/apache/ivy/plugins/repository/vfs/**/*.java org/apache/ivy/plugins/repository/vfs/**/*.java

View File

@ -297,7 +297,7 @@ public class IvySettings implements SortEngineSettings, PublishEngineSettings, P
.getClassLoader() .getClassLoader()
.loadClass("org.apache.ivy.plugins.pack.Pack200Packing"); .loadClass("org.apache.ivy.plugins.pack.Pack200Packing");
addArchivePacking(pack200.newInstance()); addArchivePacking(pack200.newInstance());
} catch (Throwable t) { } catch (Exception t) {
// ignore: the pack200 packing isn't on the classpath // ignore: the pack200 packing isn't on the classpath
Message.info("impossible to define pack200 packaging: " Message.info("impossible to define pack200 packaging: "
+ "org.apache.ivy.plugins.pack.Pack200Packing was not found", t); + "org.apache.ivy.plugins.pack.Pack200Packing was not found", t);

View File

@ -17,12 +17,8 @@
*/ */
package org.apache.ivy.plugins.pack; package org.apache.ivy.plugins.pack;
import java.io.BufferedInputStream;
import java.io.IOException; import java.io.IOException;
import java.io.InputStream; import java.io.InputStream;
import java.util.zip.GZIPInputStream;
import org.apache.commons.compress.compressors.pack200.Pack200CompressorInputStream;
public class Pack200Packing extends StreamPacking { public class Pack200Packing extends StreamPacking {
@ -51,19 +47,7 @@ public class Pack200Packing extends StreamPacking {
@Override @Override
public InputStream unpack(InputStream packed) throws IOException { public InputStream unpack(InputStream packed) throws IOException {
BufferedInputStream buffered = new BufferedInputStream(packed); return Pack200Util.unpack(packed);
buffered.mark(4);
byte[] magic = new byte[4];
buffered.read(magic, 0, 4);
buffered.reset();
InputStream in = buffered;
if (magic[0] == (byte) 0x1F && magic[1] == (byte) 0x8B && magic[2] == (byte) 0x08) {
// this is a gziped pack200
in = new GZIPInputStream(in);
}
return new Pack200CompressorInputStream(in);
} }
} }

View File

@ -0,0 +1,45 @@
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* https://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
*/
package org.apache.ivy.plugins.pack;
import java.io.BufferedInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.zip.GZIPInputStream;
import org.apache.commons.compress.compressors.pack200.Pack200CompressorInputStream;
class Pack200Util {
static InputStream unpack(InputStream packed) throws IOException {
BufferedInputStream buffered = new BufferedInputStream(packed);
buffered.mark(4);
byte[] magic = new byte[4];
buffered.read(magic, 0, 4);
buffered.reset();
InputStream in = buffered;
if (magic[0] == (byte) 0x1F && magic[1] == (byte) 0x8B && magic[2] == (byte) 0x08) {
// this is a gziped pack200
in = new GZIPInputStream(in);
}
return new Pack200CompressorInputStream(in);
}
}