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 Я конечно всё понимаю, но этого я не понимаю Ссылка на комментарий
Solydar Опубликовано: 23 октября 2019 Поделиться Опубликовано: 23 октября 2019 впрочем норм Ссылка на комментарий
Рекомендованные сообщения
Создайте аккаунт или войдите в него для комментирования
Вы должны быть пользователем, чтобы оставить комментарий
Создать аккаунт
Зарегистрируйтесь для получения аккаунта. Это просто!
Зарегистрировать аккаунтВойти
Уже зарегистрированы? Войдите здесь.
Войти сейчас