我有一个简单的IntelliJ IDEA kotlin项目与标准的目录布局,即:
src/
main/
kotlin/
ClassA.kts
ClassB.kts
resources/
test/
kotlin/
TestClassA.kts
TestClassB.kts
在这个项目中,我想使用kotlin脚本(. kts文件),我想使用IntelliJ来编辑和执行这些脚本。
在脚本中我需要使用main
中定义的类、函数等,比如ClassA
(使用test
中的东西也很好)。为了帮助编写脚本,我希望从IntelliJ获得代码完成和其他编码帮助。
问题:
- 我应该把
.kts
文件放在哪里? - 如何指定脚本在执行脚本时使用项目的类路径?
- 如何让IntelliJ在脚本文件中提供代码完成?
- 在我看来,似乎只有kotlin scratch文件和kotlin工作表文件可以正常工作(参见https://kotlinlang.org/docs/run-code-snippets.html)。
- 我想要的是与项目中的其他源代码一起存储的适当脚本,以及从IntelliJ运行配置或从终端运行它们的方法。
我使用的是IntelliJ IDEA 2022.3.1/kotlin插件223 - 1.7.21-版本-272 -IJ8214.52。
另请参见IntelliJ问题跟踪器:https://youtrack.jetbrains.com/issue/KT-55833/Kotlin-scripting-should-have-more-documentation-and-it-should-be-easier-to-execute-scripts-from-the-command-line
1条答案
按热度按时间kuhbmx9i1#
.main.kts
的要点在于它非常简单,不需要构建系统,因此只能通过依赖关系来依赖使用Maven/Gradle/Bazel构建的项目。“IntelliJ IDEAKotlinproject”听起来好像您甚至没有一个构建系统,该系统几乎排除了从命令行运行的可能性,即使直接链接是可能的。在接下来的部分中,我将假设Gradle,因为这是我所熟悉的,但等效系统在其他系统中也可以工作。
在深入讨论之前,我想调用XYProblem,因为您可能不需要.kts,一个简单的
main.kt
和fun main()
也可以工作,然后在结果应用程序或gradlew :module:run --args "..."
上运行java -jar
就可以正常工作,不需要任何特殊处理。奇怪的是,就在今天,我读了this article,它详细描述了如何制作一个易于运行的小型Kotlin应用程序。一种选择是使用
@file:Import
,但我还没有让它工作,它似乎是others neither。<rabbithole>
因此,我对此唯一可行的想法是让您的库将jar发布到本地存储库(GradlemavenLocal()
)或从本地构建文件夹导入(flatDir或使用maven { url = file://
)。请注意,这些是Gradle API,这意味着Gradle可以通过某种方式发布到这些API。现在我们在本地文件系统的
src/main/kotlin
中有一个.jar文件,.main.kts
文件可以从Maven资源库导入JAR(示例),如果幸运的话,这个内置的@file:Repository
还支持本地file://
URI,所以它“可以正常工作”。注意:
.main.kts
文件的位置并不重要,重要的是它们的文件名,这会产生巨大的差异。开发人员使用此解决方案的经验如下:
src/main/kotlin
中写入代码src/test/kotlin
中写入单元测试app.main.kts
的类路径</rabbithole>
,请注意,以上内容与应用中的main.kt
文件非常相似,不同之处在于main.kt
完全受支持,您可以执行预编译、缩小、打包等操作。您可以在此处找到一些
.main.kts
示例:https://github.com/TWiStErRob/TWiStErRob-env/search?q=filename%3Amain.kts,但它们不使用本地代码,都是仅具有mavenCentral()
依赖项的单文件。