gladdos Опубликовано: 14 октября 2019 Опубликовано: 14 октября 2019 (изменено) ТЗ: Написать фичу для софтинки, которая будет при запуске основной программы проверять наличие обновлений и скачивать их с сервера.Примечания: файл основной программы должен заменяться на ново-скаченныйДля начала пишем JSON файлик по подобной структуре.package ru.patay.entities; public class Information { public String version; public String url; public String sha256sum; } заливаем его на сервер.после psvm открываем try…catch блок ловим подобные ошибки: IOException | NoSuchAlgorithmException | URISyntaxException eГуглим GSON, коннектим его к сборщику. Впрочем для ленивых вот на него ссылкаНе отходя от конфигов сборщика (GRADLE)Пилим подобный линковщик:jar { manifest { attributes('Main-Class': "${project.group}.Main", 'Implementation-Version': version) } from { configurations.compile.collect { it.isDirectory() ? it : zipTree(it) } } }Выше указываем ТЕКУЩУЮ ВЕРСИЮ и основной пакетgroup 'ru.patay' version '1.0-SNAPSHOT'Теперь все апдейты (будущие) мы меняем в конфигах сборщика.Идем по нексусу (так называемому пожилому нексилю) Объявляем InputStream до JSON файлика и заодно его читаемInputStream is = new URL("https://example.com/package.json").openConnection().getInputStream(); String result = new BufferedReader(new InputStreamReader(is)).lines() .collect(Collectors.joining("\n")); is.close();Используем GSON ( Я так и не разобрался с встроенным JSON, пришлось использовать сторонние фреймоворки)Gson gson = new Gson(); Information information = gson.fromJson(result, Information.class);Так, первая проверка на сравнение текущей версии и свеже-полученнойif (!Main.class.getPackage().getImplementationVersion().equals(information.version)) {}Дальше сохраняем полученный файлик по ссылке из JSONSystem.out.println("New version found!"); is = new URL(information.url).openConnection().getInputStream(); File file = new File("tmp"); Files.copy(is, file.toPath(), StandardCopyOption.REPLACE_EXISTING); is.close(); И получаем его хеш сумму SHA256byte[] buffer = new byte[8192]; int count; MessageDigest digest = MessageDigest.getInstance("SHA-256"); BufferedInputStream bis = new BufferedInputStream(new FileInputStream(file)); while ((count = bis.read(buffer)) > 0) { digest.update(buffer, 0, count); } bis.close(); String downloadedSHA = new BigInteger(1, digest.digest()).toString(16).toLowerCase(); И сравниваем полученную хеш-сумму из JSON`a с хешсуммой скаченного файлаif (information.sha256sum.toLowerCase().equals(downloadedSHA)) { } else throw new IOException("SHA256SUM does not equals!"); Заменяем текущий файл скаченным файломFile current = new File(Main.class.getProtectionDomain().getCodeSource().getLocation().toURI()); FileOutputStream fos = new FileOutputStream(current); FileInputStream fis = new FileInputStream(file); fos.flush(); while (fis.available() > 0) fos.write(fis.read()); fos.close(); fis.close(); file.delete();Остается только запуститьRuntime.getRuntime().exec("java -jar " + current.getAbsolutePath()); System.exit(0); Готовый пример лежит тут : GitHubА на сегодня все. Спасибо за просмотр Изменено 14 октября 2019 пользователем gladdos
_Ender_Cheats_ Опубликовано: 15 октября 2019 Опубликовано: 15 октября 2019 По мне так бредовая тема, ну точней, не для этого форума она здесь, тут 97% - обычные люди, которые не шарят вообще в написании чего-либо. Лучше бы на нормальный форум это залил, а не на форум по майнкрафту ахывха
gladdos Опубликовано: 16 октября 2019 Автор Опубликовано: 16 октября 2019 По мне так бредовая тема, ну точней, не для этого форума она здесь, тут 97% - обычные люди, которые не шарят вообще в написании чего-либо. Лучше бы на нормальный форум это залил, а не на форум по майнкрафту ахывхаЯ её написал в раздел для разработчиков для людей которые пишут на java. Есть тут пару человек таких. Тема полезная, если писать софт для кубачей. Для серьёзных проектов подобный код не годится
SadKykyhka Опубликовано: 21 октября 2019 Опубликовано: 21 октября 2019 Очень интересно. но я ничего не понял :huh:
Trollit_Bcex Опубликовано: 23 октября 2019 Опубликовано: 23 октября 2019 Я конечно всё понимаю, но этого я не понимаю
Рекомендованные сообщения
Создайте аккаунт или войдите в него для комментирования
Вы должны быть пользователем, чтобы оставить комментарий
Создать аккаунт
Зарегистрируйтесь для получения аккаунта. Это просто!
Зарегистрировать аккаунтВойти
Уже зарегистрированы? Войдите здесь.
Войти сейчас