У меня есть скрипт Kotlin, который создает файлы и выводит некоторые сообщения журнала с помощью println(). Когда я запускаю скрипт из IntelliJ, он работает, как и ожидалось, создавая файлы и показывая вывод в консоли. Однако, когда я запускаю сценарий с помощью пакетного файла, файлы не создаются, и я не вижу никаких выходных данных в командной строке.
Вот мой код Котлина:
import java.io.File
fun main(args: Array<String>) {
println("Starting main function")
println("Hello World!")
createFile("C:\\0_Scripts\\CSV_ To proper format\\👽hi_there.txt", textToFile = "Hello there)")
createFile("C:\\0_Scripts\\CSV_ To proper format\\11111.txt", textToFile = "Hello there)")
createFile("C:\\0_Scripts\\CSV_ To proper format\\\uD83D\uDE08hi_there.txt", textToFile = "Hello there)")
println("File created")
println("Program is Finished)")
}
fun createFile(absolutePathToFileWithExtension: String, textToFile: String) =
File(absolutePathToFileWithExtension).writeText(textToFile)
А вот пакетный скрипт, который я использую для компиляции и запуска скрипта Kotlin:
cd C:\Users\user\IdeaProjects\TestScript
kotlinc src\main\kotlin\Main.kt -d bin
java -cp bin MainKt
pause
Когда я запускаю пакетный скрипт, я вижу следующий вывод, но сообщений журнала или созданных файлов нет:
C:\0_Scripts\CSV_ To proper format>test.bat
src\main\kotlin\Main.kt:4:10: warning: parameter 'args' is never used
fun main(args: Array<String>) {
^
C:\Users\user\IdeaProjects\TestScript>
Что может быть причиной этой проблемы и как я могу ее исправить, чтобы:
.1. Смотрите вывод консоли .2. Манипулировать файлами при запуске проекта IntelliJ из пакетного файла?
Благодаря ответам это рабочий скрипт:
cd C:\Users\user\IdeaProjects\TestScript
call kotlinc src\main\kotlin\Main.kt -d bin
kotlin -cp bin MainKt
pause





Но вызывая java, вы вызываете java jvm, который не загружает библиотеки и зависимости kotlin.
Вы должны заменить использование java на kotlin.
Таким образом, команды будут такими:
cd C:\Users\user\IdeaProjects\TestScript
kotlinc src\main\kotlin\Main.kt -d bin
kotlin -cp bin MainKt
pause
Насколько я знаю, вы можете вызывать двоичный файл kotlin так же, как вы называете двоичный файл java.
Когда вы вызываете kotlinc в командной строке, вы запускаете файл .../kotlinc/bin/kotlinc.bat. Когда вы запускаете пакетный файл из другого пакетного файла, управление передается новому пакетному файлу и никогда не возвращается к вызывающему пакетному файлу (т. е. это больше похоже на goto, чем на call). Итак, что происходит, так это то, что ваш пакетный файл запускает kotlinc, а затем ничего не происходит, потому что kotlinc.bat не возвращается к вашему скрипту, а вместо этого возвращается в командную строку.
Чтобы исправить это, вам нужно заменить эту строку:
kotlinc src\main\kotlin\Main.kt -d bin
с:
call kotlinc src\main\kotlin\Main.kt -d bin
Кроме того, вам нужно сделать то, что Fox2Code говорит в другом ответе (запустите приложение, используя call kotlin вместо java).
Спасибо за ответ, это сработало) Не могли бы вы также взглянуть на дополнительный вопрос? stackoverflow.com/questions/76157484/…
Двоичный файл
kotlinдолжен быть рядом с двоичным файломkotlinc, как двоичный файлjavaрядом с двоичным файломjavac