我想创建一个没有源代码的Gradle多项目。然后,该项目将有一个子项目,并且它将有一个由IntelliJ IDE生成的Java主函数。我的目的是将一个大型Java控制台应用程序转换为Kotlin,因此,在这里,我创建了一个简单的控制台应用程序,并尝试(但失败)将简单的Java主文件转换为Kotlin。
我的计算机正在运行Ubuntu 22.04。我正在IntelliJ IDEA 2022.3.1(Community Edition)上执行此练习。当我在CLI窗口中键入gradle -- version
时,得到以下响应:
------------------------------------------------------------
Gradle 7.2
------------------------------------------------------------
Build time: 2021-08-17 09:59:03 UTC
Revision: a773786b58bb28710e3dc96c4d1a7063628952ad
Kotlin: 1.5.21
Groovy: 3.0.8
Ant: Apache Ant(TM) version 1.10.9 compiled on September 27 2020
JVM: 16.0.1 (Private Build 16.0.1+9-Ubuntu-120.04)
OS: Linux 5.15.0-56-generic amd64
为了减少那些可能想要重复我所做的事情的人的复杂性,我将根项目命名为“untitled”,并将它的单个子项目命名为“untitled1”。这些值是IntellJ提供给我的默认值。我启动IntelliJ,由于我没有从上一个会话启动它,IntelliJ显示“Welcome to IntelliJ IDE”窗口。在这个窗口中,我选择了“New Project”。
此时将打开第二个窗口“新建项目”。我从左手菜单项中选择“新建项目”项。因此,我可以简化操作,方便那些可能想重现此问题的用户。我将该项目命名为“untitled”。该项目的位置可以是问题重现者希望它位于的任何位置。我选择的语言是Java。构建系统是Gradle。JDK的版本是“java”。版本17.0.5”。Gradle DSL是Kotlin。我选择不为此项目添加示例代码,因为此项目将是多项目构建的根项目。我保留了Group和Artifact ID字段的默认值:“org.example”和“untiled”分别用于我的IntelliJ安装。最后,我要求IntelliJ创建这个项目。
IntelliJ将创建此项目,并在左手视图面板中显示项目文件。右侧显示项目的构建文件。此窗口名为“build.gradle.kts(untitled)",此文件包含以下内容:
因为我告诉IntelliJ不要向这个项目添加示例代码,所以我没有在项目视图面板中的项目名称“untitled”下看到一个名为“src”的目录,如果想添加示例代码,应该这样做。
现在我创建了子项目。我在项目视图面板中右键单击项目名称“untitled”。我从出现的一系列菜单项中选择New〉Module...。一个名为“New Module”的对话框打开,我从左手菜单项中选择“New Module”项。因此,我可以让那些可能想重现此问题的人简化操作。我将该项目命名为“untitled1”。此项目位于之前创建的项目下,即问题重现者选择的位置,其目录名与之前的“新建项目”窗口相同,但附加了目录“untitled1”。我选择的语言是Java。构建系统是Gradle。JDK与根项目的SDK相同。Gradle DSL为Kotlin。父项目命名为“untitled”。这次,我确实勾选了询问我是否要创建示例代码的框,因为这个项目是我要转换的示例代码将位于其中的项目。我保留了Group和Artifact ID字段的默认值:“org.example”和“untiled1”分别用于我的IntelliJ安装。最后,我要求IntelliJ创建这个子项目。
IntelliJ将与之前为根项目创建的构建文件沿着创建此子项目,并通过在项目视图面板右侧显示项目的构建文件来做出响应。此窗口名为“build.gradle.kts(untitled1)"。
我将子项目的构建文件的每一行与根项目的每一行进行了比较,发现子项目的构建文件与根项目的构建文件完全相同。
在项目的视图面板中,我发现已经为根项目及其子项目创建了“src”目录,在这两个项目中,该目录具有以下子目录结构:
src
main
java
resources
test
在子项目中,java目录还包含包目录“org.example”下名为“Main”的示例源代码文件。我可以在IDE中打开此文件,当我打开此文件时Main.java,项目视图面板右侧会出现一个标题为“www.example.com“的窗口,其中包含以下代码:
接下来,我请求IDE将此文件转换为Kotlin。我右键单击源代码编辑器视图的选项卡。从出现的下拉菜单中,选择位于此菜单底部的“Convert Java File to Kotlin File”选项。出现一个对话框,提示我“Kotlin is not configured in the project,因此在执行转换之前我必须在项目中配置Kotlin。2我选择了标签为“确定,在项目中配置Kotlin”的选项。3另一个对话框出现。4从这个对话框中,我接受当前选择的“所有模块”,并接受Kotlin编译器和运行时版本“1. 8. 0”的给定值。最后,我单击标记为“确定”的按钮。
我现在观察到两个项目的构建文件都有相同的变化,它们都有以下内容:
我注意到IDE正在抱怨这些内容。除了我在下面提供的描述外,我还附上了a screen shot of the IDE,以帮助那些可能对这个问题感兴趣的读者,如果屏幕截图能帮助他们的话。
在第1行,包名没有解析;具体来说,IDE表示它无法解析名称“jetbrains”。2第24行和第28行看起来完全相同:IDE指出它无法解析名称“KotlinCompile”,并建议任务“属性委托必须具有'getValue(Build_gradle,KProperty*〉)'方法”。
我将编辑器视图切换到Java源文件。我观察到该文件没有更改。我对构建文件的观察已经使我得出了错误的结论,但我继续前进,因此再次从下拉菜单中选择“Convert Java File toKotlinfile”菜单选项,该菜单选项通过右键单击此编辑器视图的选项卡显示。IDE的响应与之前一样;通知我Kotlin未在项目中配置,因此我单击显示“OK,configure Kotlin in the project”的按钮。IDE通过显示“Kotlin is not configured in the project”的对话框进行响应,这是因为“There are no configurators available”。
所以......我不知道发生了什么。我认为我从这个练习中唯一可以确定的是IntelliJ声称它可以轻松地将Java转换为Kotlin是错误的。我怎么会在这个简单的练习中出错呢?
1条答案
按热度按时间ukqbszuj1#
多亏了Matt Freake的评论,我才解决了这个问题。现在,我明白了构建文件编辑器窗口右上角显示的Gradle图标表示缺少库。此图标实际上是从存储库提取库的手动请求。用户必须通过同意单击图标打开的请求来明确指示Gradle执行此操作。
尽管这个过程可能只是一次性的,但我个人希望IntelliJ IDE能以某种方式使这一点更加明显,并消除必须运行两次该过程的必要性;我本来可以在假期里过得更有成效的。嗯,好吧,我现在知道了。