cleanups
This commit is contained in:
+1
-12
@@ -24,7 +24,6 @@ constexpr auto kExecutable = "java";
|
||||
constexpr auto kWindowless = "java";
|
||||
#endif
|
||||
|
||||
// Корни, в которых Windows/Linux/macOS обычно держат JDK и JRE.
|
||||
QStringList installationRoots()
|
||||
{
|
||||
QStringList roots;
|
||||
@@ -58,7 +57,6 @@ QStringList installationRoots()
|
||||
return roots;
|
||||
}
|
||||
|
||||
// Ищем именно java.exe: у javaw.exe нет вывода, а версию мы определяем запуском.
|
||||
void appendIfExecutable(QStringList &target, const QString &binDir)
|
||||
{
|
||||
const QFileInfo info(binDir + u'/' + QString::fromLatin1(kExecutable));
|
||||
@@ -69,21 +67,18 @@ void appendIfExecutable(QStringList &target, const QString &binDir)
|
||||
target << path;
|
||||
}
|
||||
|
||||
} // namespace
|
||||
}
|
||||
|
||||
QStringList JavaLocator::findAll(const QString &gameDir)
|
||||
{
|
||||
QStringList result;
|
||||
|
||||
// 0. Сборки, скачанные самим лаунчером. Идут первыми: пользователь выбирал
|
||||
// их осознанно, в отличие от того, что нашлось в системе.
|
||||
const QList<InstalledJavaRuntime> managed = JavaRuntimeStore::installed();
|
||||
for (const InstalledJavaRuntime &entry : managed) {
|
||||
if (!result.contains(entry.javaPath))
|
||||
result << entry.javaPath;
|
||||
}
|
||||
|
||||
// 1. Рантайм, скачанный самим Minecraft: .minecraft/runtime/<component>/<os>/<component>/bin
|
||||
const QString runtime = gameDir + QStringLiteral("/runtime");
|
||||
if (QDir(runtime).exists()) {
|
||||
QDirIterator it(runtime, QStringList{QString::fromLatin1(kExecutable)},
|
||||
@@ -94,17 +89,14 @@ QStringList JavaLocator::findAll(const QString &gameDir)
|
||||
}
|
||||
}
|
||||
|
||||
// 2. JAVA_HOME
|
||||
const QString javaHome = qEnvironmentVariable("JAVA_HOME");
|
||||
if (!javaHome.isEmpty())
|
||||
appendIfExecutable(result, javaHome + QStringLiteral("/bin"));
|
||||
|
||||
// 3. PATH
|
||||
const QString onPath = QStandardPaths::findExecutable(QString::fromLatin1(kExecutable));
|
||||
if (!onPath.isEmpty())
|
||||
appendIfExecutable(result, QFileInfo(onPath).absolutePath());
|
||||
|
||||
// 4. Типовые каталоги установки
|
||||
const QStringList roots = installationRoots();
|
||||
for (const QString &root : roots) {
|
||||
const QDir dir(root);
|
||||
@@ -133,14 +125,12 @@ int JavaLocator::majorVersion(const QString &javaPath)
|
||||
QProcess process;
|
||||
process.start(javaPath, {QStringLiteral("-version")});
|
||||
if (process.waitForFinished(5000)) {
|
||||
// java печатает версию в stderr: openjdk version "17.0.2" 2022-01-18
|
||||
const QString output = QString::fromLocal8Bit(process.readAllStandardError())
|
||||
+ QString::fromLocal8Bit(process.readAllStandardOutput());
|
||||
static const QRegularExpression re(QStringLiteral("version\\s+\"(\\d+)(?:\\.(\\d+))?"));
|
||||
const QRegularExpressionMatch match = re.match(output);
|
||||
if (match.hasMatch()) {
|
||||
const int first = match.captured(1).toInt();
|
||||
// До Java 9 версия выглядела как 1.8.0_301 — мажорная тут вторая цифра.
|
||||
major = (first == 1) ? match.captured(2).toInt() : first;
|
||||
}
|
||||
}
|
||||
@@ -166,7 +156,6 @@ QString JavaLocator::select(const QString &gameDir,
|
||||
QStringList candidates;
|
||||
if (!preferred.isEmpty()) {
|
||||
QFileInfo info(preferred);
|
||||
// В настройках можно указать как сам java.exe, так и корень JDK.
|
||||
if (info.isDir())
|
||||
appendIfExecutable(candidates, info.absoluteFilePath() + QStringLiteral("/bin"));
|
||||
else if (info.isFile())
|
||||
|
||||
Reference in New Issue
Block a user