Replace 'Launcher.getCurrentJarFiles()' with 'JarUtils.thisJar()'
This commit is contained in:
@@ -31,19 +31,14 @@ import org.jackhuang.hmcl.upgrade.UpdateHandler;
|
|||||||
import org.jackhuang.hmcl.util.CrashReporter;
|
import org.jackhuang.hmcl.util.CrashReporter;
|
||||||
import org.jackhuang.hmcl.util.Lang;
|
import org.jackhuang.hmcl.util.Lang;
|
||||||
import org.jackhuang.hmcl.util.StringUtils;
|
import org.jackhuang.hmcl.util.StringUtils;
|
||||||
import org.jackhuang.hmcl.util.io.FileUtils;
|
|
||||||
import org.jackhuang.hmcl.util.platform.Architecture;
|
import org.jackhuang.hmcl.util.platform.Architecture;
|
||||||
import org.jackhuang.hmcl.util.platform.OperatingSystem;
|
import org.jackhuang.hmcl.util.platform.OperatingSystem;
|
||||||
|
|
||||||
import java.awt.*;
|
import java.awt.*;
|
||||||
import java.io.File;
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.io.UnsupportedEncodingException;
|
|
||||||
import java.lang.management.ManagementFactory;
|
import java.lang.management.ManagementFactory;
|
||||||
import java.net.*;
|
import java.net.*;
|
||||||
import java.nio.file.Paths;
|
import java.nio.file.Paths;
|
||||||
import java.util.LinkedList;
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.concurrent.TimeUnit;
|
import java.util.concurrent.TimeUnit;
|
||||||
import java.util.logging.Level;
|
import java.util.logging.Level;
|
||||||
|
|
||||||
@@ -158,34 +153,5 @@ public final class Launcher extends Application {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
public static List<File> getCurrentJarFiles() {
|
|
||||||
List<File> result = new LinkedList<>();
|
|
||||||
if (Launcher.class.getClassLoader() instanceof URLClassLoader) {
|
|
||||||
URL[] urls = ((URLClassLoader) Launcher.class.getClassLoader()).getURLs();
|
|
||||||
for (URL u : urls)
|
|
||||||
try {
|
|
||||||
File f = new File(u.toURI());
|
|
||||||
if (f.isFile() && (f.getName().endsWith(".exe") || f.getName().endsWith(".jar")))
|
|
||||||
result.add(f);
|
|
||||||
} catch (URISyntaxException e) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
try {
|
|
||||||
File jarFile = new File(URLDecoder.decode(Launcher.class.getProtectionDomain().getCodeSource().getLocation().getPath(), "UTF-8"));
|
|
||||||
String ext = FileUtils.getExtension(jarFile);
|
|
||||||
if ("jar".equals(ext) || "exe".equals(ext))
|
|
||||||
result.add(jarFile);
|
|
||||||
} catch (UnsupportedEncodingException e) {
|
|
||||||
LOG.log(Level.WARNING, "Failed to decode jar path", e);
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (result.isEmpty())
|
|
||||||
return null;
|
|
||||||
else
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static final CrashReporter CRASH_REPORTER = new CrashReporter(true);
|
public static final CrashReporter CRASH_REPORTER = new CrashReporter(true);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -18,7 +18,6 @@
|
|||||||
package org.jackhuang.hmcl.ui.export;
|
package org.jackhuang.hmcl.ui.export;
|
||||||
|
|
||||||
import javafx.scene.Node;
|
import javafx.scene.Node;
|
||||||
import org.jackhuang.hmcl.Launcher;
|
|
||||||
import org.jackhuang.hmcl.mod.ModAdviser;
|
import org.jackhuang.hmcl.mod.ModAdviser;
|
||||||
import org.jackhuang.hmcl.mod.ModpackExportInfo;
|
import org.jackhuang.hmcl.mod.ModpackExportInfo;
|
||||||
import org.jackhuang.hmcl.mod.mcbbs.McbbsModpackExportTask;
|
import org.jackhuang.hmcl.mod.mcbbs.McbbsModpackExportTask;
|
||||||
@@ -33,14 +32,13 @@ import org.jackhuang.hmcl.task.Task;
|
|||||||
import org.jackhuang.hmcl.ui.wizard.WizardController;
|
import org.jackhuang.hmcl.ui.wizard.WizardController;
|
||||||
import org.jackhuang.hmcl.ui.wizard.WizardProvider;
|
import org.jackhuang.hmcl.ui.wizard.WizardProvider;
|
||||||
import org.jackhuang.hmcl.util.Lang;
|
import org.jackhuang.hmcl.util.Lang;
|
||||||
|
import org.jackhuang.hmcl.util.io.JarUtils;
|
||||||
import org.jackhuang.hmcl.util.io.Zipper;
|
import org.jackhuang.hmcl.util.io.Zipper;
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.nio.file.Files;
|
import java.nio.file.Files;
|
||||||
import java.util.Collection;
|
import java.nio.file.Path;
|
||||||
import java.util.Collections;
|
import java.util.*;
|
||||||
import java.util.List;
|
|
||||||
import java.util.Map;
|
|
||||||
|
|
||||||
import static org.jackhuang.hmcl.setting.ConfigHolder.config;
|
import static org.jackhuang.hmcl.setting.ConfigHolder.config;
|
||||||
|
|
||||||
@@ -70,8 +68,8 @@ public final class ExportWizardProvider implements WizardProvider {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private Task<?> exportWithLauncher(String modpackType, ModpackExportInfo exportInfo, File modpackFile) {
|
private Task<?> exportWithLauncher(String modpackType, ModpackExportInfo exportInfo, File modpackFile) {
|
||||||
List<File> launcherJar = Launcher.getCurrentJarFiles();
|
Optional<Path> launcherJar = JarUtils.thisJar();
|
||||||
boolean packWithLauncher = exportInfo.isPackWithLauncher() && launcherJar != null;
|
boolean packWithLauncher = exportInfo.isPackWithLauncher() && launcherJar.isPresent();
|
||||||
return new Task<Object>() {
|
return new Task<Object>() {
|
||||||
File tempModpack;
|
File tempModpack;
|
||||||
Task<?> exportTask;
|
Task<?> exportTask;
|
||||||
@@ -139,8 +137,7 @@ public final class ExportWizardProvider implements WizardProvider {
|
|||||||
if (background_jpg.isFile())
|
if (background_jpg.isFile())
|
||||||
zip.putFile(background_jpg, "background.jpg");
|
zip.putFile(background_jpg, "background.jpg");
|
||||||
|
|
||||||
for (File jar : launcherJar)
|
zip.putFile(launcherJar.get(), launcherJar.get().getFileName().toString());
|
||||||
zip.putFile(jar, jar.getName());
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -29,7 +29,6 @@ import javafx.scene.control.*;
|
|||||||
import javafx.scene.input.MouseEvent;
|
import javafx.scene.input.MouseEvent;
|
||||||
import javafx.scene.layout.*;
|
import javafx.scene.layout.*;
|
||||||
import javafx.stage.FileChooser;
|
import javafx.stage.FileChooser;
|
||||||
import org.jackhuang.hmcl.Launcher;
|
|
||||||
import org.jackhuang.hmcl.auth.Account;
|
import org.jackhuang.hmcl.auth.Account;
|
||||||
import org.jackhuang.hmcl.auth.authlibinjector.AuthlibInjectorServer;
|
import org.jackhuang.hmcl.auth.authlibinjector.AuthlibInjectorServer;
|
||||||
import org.jackhuang.hmcl.game.HMCLGameRepository;
|
import org.jackhuang.hmcl.game.HMCLGameRepository;
|
||||||
@@ -43,6 +42,7 @@ import org.jackhuang.hmcl.ui.construct.*;
|
|||||||
import org.jackhuang.hmcl.ui.wizard.WizardController;
|
import org.jackhuang.hmcl.ui.wizard.WizardController;
|
||||||
import org.jackhuang.hmcl.ui.wizard.WizardPage;
|
import org.jackhuang.hmcl.ui.wizard.WizardPage;
|
||||||
import org.jackhuang.hmcl.util.StringUtils;
|
import org.jackhuang.hmcl.util.StringUtils;
|
||||||
|
import org.jackhuang.hmcl.util.io.JarUtils;
|
||||||
import org.jackhuang.hmcl.util.platform.OperatingSystem;
|
import org.jackhuang.hmcl.util.platform.OperatingSystem;
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
@@ -96,8 +96,7 @@ public final class ModpackInfoPage extends Control implements WizardPage {
|
|||||||
launchArguments.set(versionSetting.getMinecraftArgs());
|
launchArguments.set(versionSetting.getMinecraftArgs());
|
||||||
javaArguments.set(versionSetting.getJavaArgs());
|
javaArguments.set(versionSetting.getJavaArgs());
|
||||||
|
|
||||||
List<File> launcherJar = Launcher.getCurrentJarFiles();
|
canIncludeLauncher = JarUtils.thisJar().isPresent();
|
||||||
canIncludeLauncher = launcherJar != null;
|
|
||||||
|
|
||||||
next.set(e -> onNext());
|
next.set(e -> onNext());
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -19,7 +19,6 @@ package org.jackhuang.hmcl.util.io;
|
|||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.net.URISyntaxException;
|
import java.net.URISyntaxException;
|
||||||
import java.net.URL;
|
|
||||||
import java.nio.file.FileSystemNotFoundException;
|
import java.nio.file.FileSystemNotFoundException;
|
||||||
import java.nio.file.Files;
|
import java.nio.file.Files;
|
||||||
import java.nio.file.Path;
|
import java.nio.file.Path;
|
||||||
@@ -34,29 +33,21 @@ public final class JarUtils {
|
|||||||
private JarUtils() {
|
private JarUtils() {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@SuppressWarnings("OptionalUsedAsFieldOrParameterType")
|
||||||
|
private static final Optional<Path> THIS_JAR =
|
||||||
|
Optional.ofNullable(JarUtils.class.getProtectionDomain().getCodeSource())
|
||||||
|
.map(CodeSource::getLocation)
|
||||||
|
.map(url -> {
|
||||||
|
try {
|
||||||
|
return Paths.get(url.toURI());
|
||||||
|
} catch (FileSystemNotFoundException | IllegalArgumentException | URISyntaxException e) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
})
|
||||||
|
.filter(Files::isRegularFile);
|
||||||
|
|
||||||
public static Optional<Path> thisJar() {
|
public static Optional<Path> thisJar() {
|
||||||
CodeSource codeSource = JarUtils.class.getProtectionDomain().getCodeSource();
|
return THIS_JAR;
|
||||||
if (codeSource == null) {
|
|
||||||
return Optional.empty();
|
|
||||||
}
|
|
||||||
|
|
||||||
URL url = codeSource.getLocation();
|
|
||||||
if (url == null) {
|
|
||||||
return Optional.empty();
|
|
||||||
}
|
|
||||||
|
|
||||||
Path path;
|
|
||||||
try {
|
|
||||||
path = Paths.get(url.toURI());
|
|
||||||
} catch (FileSystemNotFoundException | IllegalArgumentException | URISyntaxException e) {
|
|
||||||
return Optional.empty();
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!Files.isRegularFile(path)) {
|
|
||||||
return Optional.empty();
|
|
||||||
}
|
|
||||||
|
|
||||||
return Optional.of(path);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static Optional<Manifest> getManifest(Path jar) {
|
public static Optional<Manifest> getManifest(Path jar) {
|
||||||
|
|||||||
Reference in New Issue
Block a user