Итого, что мы имеем с гуся. Во-первых никто не знает, как это работает, кто знал — видимо уже не расскажут, ибо мёртвые не выдают секретов. Определённая польза от чтения, конечно, есть. Во-первых стало немного понятно, как работает сам JSON-file: cmd": [] Список исполняемых аргументов-буков, где в кавычках через запятую они и изложены: "javac", "-J-Dfile.encoding=utf8", "-d", ".", "$file_name" буквально консольное
javac -J-Dfile.encoding=utf8 -d . мойфайл.java
где -J c флагом — заставляет javac сменить кодировку для отображение русских букв, а -d . говорит ему положить class-файлы в корневую папку проекта (что выглядит лишним, потому что он кладёт их туда и без этого ключа) && — разумеется логическое и ещё, после чего следует start cmd /k — запустить консоль Windows и не закрывать её, в которой выполнить java сгенерированный.файл
Вроде всё просто. Команды можно повторить вручную в консоли, если строки package нет, всё штатно отработает. А вот если она есть... В сгенерированном без этой строки класс-файле путь выглядит как папка , со строкой из имени класса — папка/папка. Но он не запускается не из корня, не из папки, не из папки/папки, мать его... не просто так, ни с командой -cp ., ни с командой -сp .. из любого места от корня выше или ниже. Хотя везде написано "просто убедитесь что имя пакета идентично структуре папок на диске относительно корневой директории и вы написали буквы в правильном регистре“. Видимо это сакральное знание придётся отложить на более позднюю ступень.
P.S. Написал я это и пошёл грустно читать RTFM. А там такое интересное место:
Я-то командую "java", "$file_base_name". А что, если вместо этого скомандовать "java", "$file_base_name.$file_base_name"
И хлоп. Вопрос решился. А папке с файлом java создаётся папка с именем файла, в которой лежат файлы класса со строкой package, которые успешно запускаются.
Но для красоты хотелось бы понять, как передать консоли команду обработать классы лежащие непосредственно в корневой папке без создания дополнительной.
Итого, что мы имеем с гуся. Во-первых никто не знает, как это работает, кто знал — видимо уже не расскажут, ибо мёртвые не выдают секретов. Определённая польза от чтения, конечно, есть. Во-первых стало немного понятно, как работает сам JSON-file: cmd": [] Список исполняемых аргументов-буков, где в кавычках через запятую они и изложены: "javac", "-J-Dfile.encoding=utf8", "-d", ".", "$file_name" буквально консольное
javac -J-Dfile.encoding=utf8 -d . мойфайл.java
где -J c флагом — заставляет javac сменить кодировку для отображение русских букв, а -d . говорит ему положить class-файлы в корневую папку проекта (что выглядит лишним, потому что он кладёт их туда и без этого ключа)
&& — разумеется логическое и ещё, после чего следует start cmd /k — запустить консоль Windows и не закрывать её, в которой выполнить java сгенерированный.файл
Вроде всё просто. Команды можно повторить вручную в консоли, если строки package нет, всё штатно отработает. А вот если она есть... В сгенерированном без этой строки класс-файле путь выглядит как папка , со строкой из имени класса — папка/папка. Но он не запускается не из корня, не из папки, не из папки/папки, мать его... не просто так, ни с командой -cp ., ни с командой -сp .. из любого места от корня выше или ниже. Хотя везде написано "просто убедитесь что имя пакета идентично структуре папок на диске относительно корневой директории и вы написали буквы в правильном регистре“. Видимо это сакральное знание придётся отложить на более позднюю ступень.
Я не понимаю, почему "-cp", ".", перед именем файла не мешает запуску, если строка package закомментирована, но и не помогает ему, если она активная. Можете сказать, каким образом в sublime-build добавить текущую директорию как classpath?
Я в теории понимаю что нужен classpath, я его уже мучал. Как это сделать? Если в sublime-build вписать:
"-cp ${file_path}",
то на выходе я получаю:
error: invalid flag: -cp полный путь к файлу
Написано
Войдите на сайт
Чтобы задать вопрос и получить на него квалифицированный ответ.
cmd": [] Список исполняемых аргументов-буков, где в кавычках через запятую они и изложены:
"javac", "-J-Dfile.encoding=utf8", "-d", ".", "$file_name" буквально консольное
javac -J-Dfile.encoding=utf8 -d . мойфайл.java
где -J c флагом — заставляет javac сменить кодировку для отображение русских букв, а
-d . говорит ему положить class-файлы в корневую папку проекта (что выглядит лишним, потому что он кладёт их туда и без этого ключа)
&& — разумеется логическое и ещё, после чего следует
start cmd /k — запустить консоль Windows и не закрывать её, в которой выполнить
java сгенерированный.файл
Вроде всё просто. Команды можно повторить вручную в консоли, если строки package нет, всё штатно отработает. А вот если она есть... В сгенерированном без этой строки класс-файле путь выглядит как папка , со строкой из имени класса — папка/папка. Но он не запускается не из корня, не из папки, не из папки/папки, мать его... не просто так, ни с командой -cp ., ни с командой -сp .. из любого места от корня выше или ниже. Хотя везде написано "просто убедитесь что имя пакета идентично структуре папок на диске относительно корневой директории и вы написали буквы в правильном регистре“. Видимо это сакральное знание придётся отложить на более позднюю ступень.
P.S. Написал я это и пошёл грустно читать RTFM. А там такое интересное место:
Я-то командую "java", "$file_base_name". А что, если вместо этого скомандовать "java", "$file_base_name.$file_base_name"
И хлоп. Вопрос решился. А папке с файлом java создаётся папка с именем файла, в которой лежат файлы класса со строкой package, которые успешно запускаются.
Но для красоты хотелось бы понять, как передать консоли команду обработать классы лежащие непосредственно в корневой папке без создания дополнительной.