Соглашение о компиляции и выполнении приложений Java из оболочки?
Какое соглашение используется для компиляции и выполнения приложений Java из оболочки? В качестве конкретного случая использования я учу некоторых детей читать исходный код Java и выбирать мини-шкатулку (которая представляет собой закомментированную версию записи Notch Ludum Dare 22). Это довольно увлекательно для них, но я уже 10 лет отстаиваюсь от царства Java, и, честно говоря, я хотел бы одновременно научить их, как использовать оболочку и менее надежные (т.е. не IDE) редакторы перед прыжком в Затмение и тому подобное. Я хотел бы понять:
A) Какую команду оболочки вы бы выполнили для компиляции и запуска приложения (и из какой папки проекта; т.е. miniventure
или же miniventure/src
или же miniventure/src/com/mojang/ld22
) а также
Б) Зачем нужно знать, как создавать проекты и оболочку? java
а также javac
аргументы для дальнейшего использования при копании в других проектах из src, таких как этот?
1 ответ
Учитывая ограничение на работу только в командной оболочке, лучший способ справиться с компиляцией - запустить javac из корня вашего classpath, прямо в каталоге, который содержит любой пакет верхнего уровня, который вы определили для вашего исходного кода (похоже, возможно miniventure/src
в твоем случае). Вы можете просто запустить Java c и использовать -cp
(сокращение от classpath) аргумент командной строки для определения корня вашего classpath. Поскольку вы учите новых программистов, вы можете использовать длинную форму того же варианта, -classpath
чтобы подчеркнуть, что они устанавливают путь к классам Java.
Если вы запускаете javac из корня вашего classpath, обычно просто используется точка для ссылки на тот же каталог: javac -cp .
; потому что javac будет проходить через структуру каталогов (пакетов), чтобы найти все исходные файлы (все, что имеет расширение имени файла.java), но документы для javac рекомендуют более структурированный подход:
Есть два способа передать имена файлов исходного кода в javac:
- Для небольшого количества исходных файлов просто перечислите имена файлов в командной строке.
- Для большого количества исходных файлов перечислите имена файлов в файле, разделенные пробелами или переносами строк. Затем используйте имя файла списка в командной строке javac, которому предшествует символ @.
Если вы запустите javac таким образом, он поместит файлы классов рядом с исходными файлами, но затем все файлы классов будут смешаны с исходными файлами и могут быть разбросаны по структуре каталогов / пакетов. Обычный способ справиться с этим - использование javac -d
аргумент командной строки, который определяет каталог, в который должны быть записаны скомпилированные классы; javac сохранит структуру пакета и создаст любую структуру каталогов, необходимую во время компиляции. Стандартным способом определения этой опции всегда был каталог с именем: classes
это брат к источнику (или src
в вашем случае) каталог. Итак, вы бы создали новый каталог: miniventure/classes
и тогда ваша командная строка будет включать в себя: -d ./classes
,
Поскольку вы учите новых программистов, вам нужно будет включать информацию об отладке во время компиляции, поэтому, когда они сталкиваются с ошибками или исключениями, трассировка стека будет включать подробную информацию об отладке. Параметр командной строки javac для этого: -g
который сгенерирует файлы классов со всеми включенными опциями отладки; это будет включать следующие параметры отладки:
И, наконец, поскольку может быть полезно, чтобы новые программисты видели все подробно, вы можете включить -verbose
опция, которая сообщает javac выводить очень подробные сообщения, включая каждый загруженный класс и каждый файл исходного кода, который компилируется.
Итак, собрав все это вместе, ваша командная строка javac будет выглядеть так:
javac -classpath . -d ./classes -g -verbose
При том понимании, что я не включил опцию для перечисления каждого файла исходного кода в командной строке или использовал аргумент @ для ссылки на файл, который содержит список имен файлов. Лично я никогда не использовал эту опцию, и мне кажется, она кажется мне слишком сложной. Надеюсь, что это полезно -