我有一个Kotlin脚本,它使用println()创建文件并输出一些日志消息。当我从IntelliJ运行脚本时,它按预期工作,创建文件并在控制台中显示输出。但是,当我使用批处理文件运行脚本时,并没有创建这些文件,并且在命令提示符中看不到任何输出。
下面是我的Kotlin代码:
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
2条答案
按热度按时间lawou6xi1#
当您在命令行上调用
kotlinc
时,您正在运行文件.../kotlinc/bin/kotlinc.bat
。当您从另一个批处理文件运行一个批处理文件时,控制将转移到新的批处理文件,并且永远不会返回到调用批处理文件(即它更像是goto
而不是call
)。所以,发生的事情是,你的批处理文件运行kotlinc,然后什么也没有发生,因为kotlinc.bat没有返回到你的脚本,而是返回到命令行。要解决此问题,您需要替换此行:
其中:
此外,您需要按照Fox2Code在另一个答案中所说的那样做(使用
call kotlin
而不是java
运行应用程序)。jk9hmnmh2#
但是调用
java
你调用的是java jvm,它不会加载Kotlin库和依赖项。您应该将
java
的使用替换为kotlin
。所以命令是:
据我所知,你可以像调用
java
二进制文件一样调用kotlin
二进制文件。