Update SlimJar + Nashorn for Java 17 (#51)

* Updated SlimJar

* Updated Nashorn to work on Java 17
This commit is contained in:
Matt 2021-10-18 18:57:00 +01:00 committed by GitHub
parent 5dbf648699
commit afcd8e0dbf
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
6 changed files with 27 additions and 13 deletions

View File

@ -19,6 +19,6 @@ repositories {
dependencies {
compileOnly project(':evaluator-api')
compileOnly fileTree("libs")
implementation 'io.github.slimjar:slimjar:1.2.3'
implementation 'io.github.slimjar:slimjar:1.2.6'
testImplementation group: 'junit', name: 'junit', version: '4.12'
}

Binary file not shown.

Binary file not shown.

View File

@ -12,7 +12,7 @@ import java.util.Map;
public final class NashornScriptEvaluatorFactory implements ScriptEvaluatorFactory {
public static final Collection<String> LIBRARIES = Arrays.asList(
"nashorn-core-15.1.isolated-jar",
"nashorn-core-15.3.isolated-jar",
"asm-commons-9.2.isolated-jar",
"asm-util-9.2.isolated-jar",
"asm-9.2.isolated-jar"

View File

@ -1,8 +1,6 @@
package com.extendedclip.papi.expansion.javascript.evaluator;
import com.extendedclip.papi.expansion.javascript.evaluator.util.InjectionUtil;
import io.github.slimjar.injector.loader.Injectable;
import io.github.slimjar.injector.loader.InjectableFactory;
import javax.script.ScriptException;
import java.io.File;

View File

@ -4,6 +4,8 @@ import com.extendedclip.papi.expansion.javascript.evaluator.LibraryInjectionExce
import com.extendedclip.papi.expansion.javascript.evaluator.QuickJsScriptEvaluatorFactory;
import io.github.slimjar.injector.loader.Injectable;
import io.github.slimjar.injector.loader.InjectableFactory;
import io.github.slimjar.resolver.data.Repository;
import io.github.slimjar.resolver.mirrors.SimpleMirrorSelector;
import java.io.File;
import java.io.IOException;
@ -18,6 +20,7 @@ import java.nio.file.StandardOpenOption;
import java.security.NoSuchAlgorithmException;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.List;
import java.util.jar.JarFile;
import java.util.zip.ZipEntry;
@ -42,9 +45,18 @@ public final class InjectionUtil {
public static void inject(final Collection<String> libraries) throws LibraryInjectionException {
try {
final Collection<URL> libraryURLs = extractLibraries(libraries);
final File selfFile = new File(SELF_JAR_URL.toURI());
final File libsFolder = getLibsFolder(selfFile);
final Collection<URL> libraryURLs = extractLibraries(selfFile, libsFolder, libraries);
final ClassLoader bukkitClassLoader = InjectionUtil.class.getClassLoader().getParent();
final Injectable injectable = InjectableFactory.create(bukkitClassLoader);
final Injectable injectable = InjectableFactory.create(
libsFolder.toPath(),
//Collections.singletonList(new Repository(new URL(SimpleMirrorSelector.CENTRAL_URL))),
Collections.emptyList(),
bukkitClassLoader
);
for (final URL libraryURL : libraryURLs) {
injectable.inject(libraryURL);
}
@ -53,12 +65,12 @@ public final class InjectionUtil {
}
}
private static Collection<URL> extractLibraries(final Collection<String> libraries) throws IOException, URISyntaxException, NoSuchAlgorithmException, ReflectiveOperationException {
private static Collection<URL> extractLibraries(final File selfFile, final File libsFolder, final Collection<String> libraries) throws IOException, URISyntaxException, NoSuchAlgorithmException, ReflectiveOperationException {
final Collection<URL> extracted = new ArrayList<>();
final File selfFile = new File(SELF_JAR_URL.toURI());
final JarFile jarFile = new JarFile(selfFile);
for (final String library : libraries) {
final File extractedFile = getExtractionFile(library, selfFile);
final File extractedFile = getExtractionFile(library, libsFolder);
if (extractedFile.exists()) {
extracted.add(extractedFile.toURI().toURL());
continue;
@ -81,7 +93,11 @@ public final class InjectionUtil {
return extracted;
}
private static File getExtractionFile(final String name, final File selfFile) {
return new File(selfFile.getParentFile(), "libraries/" + name.replace("isolated-jar", "jar"));
private static File getExtractionFile(final String name, final File libsFolder) {
return new File(libsFolder, name.replace("isolated-jar", "jar"));
}
private static File getLibsFolder(final File selfFile) {
return new File(selfFile.getParentFile(), "libraries");
}
}