Комментарии 17
Хороший
На правах рекламы. Вообще в последнее время буквально все мои знакомые решили перекатиться в ИТ так или иначе. Спектр профессий исходный там разный, от пианистки до инженера-электрика. И задают вопросы все примерно одинаковые.
Отвечать мне всем одно и то же надоело, поэтому я запилил ответы на вопросы в виде книги. Первая часть там - общие вопросы, типа "какой язык выбрать", вторая часть - конкретно начальная траектория вкатывания в Java. Какие навыки нужны от человека лично мне, чтобы я взял его джуном на работу.
Может кому пригодится https://egor-smirnov.gitbook.io/voiti-v-aiti/vvedenie/voiti-v-aiti
Написано оно до начала СВО, поэтому разделы про поиск работы и зарплаты сейчас, возможно, утратили актуальность
Полезно. Я бы еще указал, что система директорий это некая договоренность. Очень удобно - приходишь в чужой проект и сразу знаешь что где лежит.
И еще - винда это не грех, но там же есть WSL, так что можно даже на винде работать по взрослому в Linux, bash etc
Никогда не пробовал в винде писать баш-скрипты. Как по мне - какое-то извращение.
Да и в целом для такой задачи баш не сильно лучше Cmd. Мой уровень незнания для них примерно одинаковый. Скажу по секрету, часть скрипта мне вообще ChatGPT написал.
Так если ваш уровень незнания одинаковый, то почему бы не попросить chatgpt писать на баше?
Вы же Java девелопер, зачем писать то, что запустится только под виндой, если можно написать то, что запустится везде?
Затем что мне удобнее было сделать так, как я сделал. Если сделаете форк моего репозитория и перепишете скрипты на баше, или на чем угодно еще - дайте ссылку, добавлю в статью.
Не смог разобраться с новой авторизацией гитхаба (по ключам, по логину/паролю больше не работает). Публикую сюда:
#!/bin/bash
#
case "$1" in
dependencies)
echo "Resolving dependencies..."
mkdir -p lib
java -jar ./ivy-2.5.2.jar -retrieve "lib/[artifact]-[type]-[revision].[ext]"
echo "Done"
;;
build)
echo "Building..."
mkdir -p build
find -name *.java > build/sources.txt
javac -d out/classes -cp lib/*:src @build/sources.txt
cd out/classes
jar cf ../HelloWorld.jar .
echo "Build complete"
;;
run)
echo "Running..."
java -cp out/*:lib/* $2
echo "Stop"
;;
clean)
echo "Cleaning..."
rm -fr lib build out
echo "Clear"
;;
*)
echo "Unknown command: $1"
echo "Usage: $0 dependencies|build|run|clean"
;;
esac
Кстати, у вас закрывающая кавычка отсутствует в строке 16
Я не понимаю, почему автор make не запользовал - достаточно низкоуровнево, чтобы показать какими командами реально собирается проект, но без необходимости вручную анализировать аргументы командной строки и т.п.
Потому что идея была как раз в том, чтобы показать аргументы командной строки, от простого к сложному. А make здесь - лишнее звено, которое еще надо отдельно изучать. Это ведь уже и есть система сборки. А задача была - показать как прийти к самой идее необходимости такой системы.
make всё таки общеизвестная система, не привязанная к коннкретному языку
идея была как раз в том, чтобы показать аргументы командной строки
Аргументы, передаваемые в javac и т.п. в Makefile и так будут в явном виде. А вот аргументы вашего скрипта и код типа if "%1"=="build" - это скорее лишняя сущность, отвлекающая от сути. Но если предполагается, что кто-то из читателей не знаком с make - может, проще и на cmd...
Какая адекватная статья!
Я хотя и имею более 6 лет опыта в Java с многими тысячами строк кода и в общем-то хорошими скилами (если говнокодю, то знаю об этом ?). Но пришёл я уже в настроенный проект с maven и не было необходимости/времени разобраться как сборщик работают.
Спасибо!
Да уж, про неперекомпиляцию сразу вспоминается инкременальная сборка gradle и то, что частенько она не работает :)
Про перекомпиляцию мне вспоминаются времена, когда я программировал на C++. Там своя атмосфера, когда изменение одного .h файла приводит к пересборке огромного проекта, так как этот заголовок включается во все файлы с исходным кодом.
Приходилось использовать систему распределенной сборки IncrediBuild, стоявшую на всех машинах разработчиков и собиравшую проект распределенно по всей студии. Только тогда получалось какое-то разумное время.
Слава Богу, в Java такой ерунды нет.
Вопрос: можно ли это написать на powershell вместо bash?
Делаем свою простейшую систему сборки для Java