从 IntelliJ 中编译代码
Compiling code from within IntelliJ
我已经设法在 'Walkthrough' repository 中编译和执行 Cyelon 代码,方法是右键单击函数并选择 'Run functionName'。
我还尝试创建自己的 Ceylon 项目(名为 POSTtoFile)并查看是否可以从那里执行 'Hello World' 函数。我做不到。我想我必须为我的项目创建某种构建配置,但我不知道要在这些表单字段中填写什么:
Installing Ceylon IDE for IntelliJ指南对这个问题完全没有提及。如果它包含一个名为 'making your first Ceylon'-project 的部分,那就太好了。令人尴尬的是,该文档的所有以前的读者都必须提前知道这些内容。所以我来了!唯一的例外。
在 'Ceylon module' 下拉列表中,有一个名为 module default "unversioned"
的选项。我尝试选择那个,然后单击 'Run' -> 'Run POSTtoFile'。我得到了这个输出:
"C:\Program Files\Java\jdk1.8.0_121\bin\java" -Dceylon.system.repo=C:\Users\Jon\.IdeaIC2016.3\config\plugins\CeylonIDEA\classes\embeddedDist\repo -Didea.launcher.port=7536 "-Didea.launcher.bin.path=C:\Program Files (x86)\JetBrains\IntelliJ IDEA Community Edition 2016.3.3\bin" -Dfile.encoding=windows-1252 -classpath "C:\Users\Jon\.IdeaIC2016.3\config\plugins\CeylonIDEA\classes\embeddedDist\lib\ceylon-bootstrap.jar;C:\Program Files (x86)\JetBrains\IntelliJ IDEA Community Edition 2016.3.3\lib\idea_rt.jar" com.intellij.rt.execution.application.AppMain com.redhat.ceylon.launcher.Bootstrap run --run "" default/unversioned
ceylon run: Module default/unversioned not found in the following repositories:
C:\Users\Jon\.IdeaIC2016.3\config\plugins\CeylonIDEA\classes\embeddedDist\repo
C:\Users\Jon\Auchitect\POSTtoFile\modules
C:\Users\Jon\.ceylon\cache
https://modules.ceylon-lang.org/repo/1
[Maven] Aether
[NPM] npm
Process finished with exit code 1
编辑:
如下图所示,我在 IntelliJ window 底部没有工具栏,也没有看到名为 'Ceylon problems':[=38 的工具 window =]
关于您的其他问题:
- 'modules' 文件夹为空
- 当我单击
Build>Rebuild Project
时,IntelliJ 似乎可以正常工作。这是输出:
- 这些是我的版本号:
当我将以下代码放入 main.ceylon
文件时:
共享无效你好(){
打印("Hello , World!");
}
(抱歉,堆栈溢出不会将其格式化为代码,即使我在每行前面有 4 个空格)
我在函数 hello
的左边看到了绿色箭头,但是我无法点击它。它说 'Nothing here':
编辑 2:
我尝试将源代码文件 (main.ceilon
) 从根目录 (POSTtoFile
) 移动到源目录 (POSTtoFile/source
)。
然后我点击 Run
-> Run 'POSTtoFile'
.
这给了我以下新输出:
"C:\Program Files\Java\jdk1.8.0_121\bin\java" -Dceylon.system.repo=C:\Users\Jon\.IdeaIC2016.3\config\plugins\CeylonIDEA\classes\embeddedDist\repo -Didea.launcher.port=7532 "-Didea.launcher.bin.path=C:\Program Files (x86)\JetBrains\IntelliJ IDEA Community Edition 2016.3.3\bin" -Dfile.encoding=windows-1252 -classpath "C:\Users\Jon\.IdeaIC2016.3\config\plugins\CeylonIDEA\classes\embeddedDist\lib\ceylon-bootstrap.jar;C:\Program Files (x86)\JetBrains\IntelliJ IDEA Community Edition 2016.3.3\lib\idea_rt.jar" com.intellij.rt.execution.application.AppMain com.redhat.ceylon.launcher.Bootstrap run --run "" default/unversioned
ceylon run: String index out of range: 0
java.lang.StringIndexOutOfBoundsException: String index out of range: 0
at java.lang.String.charAt(String.java:658)
at ceylon.modules.api.runtime.AbstractRuntime.invokeRun(AbstractRuntime.java:53)
at ceylon.modules.api.runtime.AbstractRuntime.execute(AbstractRuntime.java:105)
at ceylon.modules.api.runtime.AbstractRuntime.execute(AbstractRuntime.java:101)
at ceylon.modules.Main.execute(Main.java:69)
at ceylon.modules.Main.main(Main.java:42)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.jboss.modules.Module.run(Module.java:308)
at org.jboss.modules.Main.main(Main.java:487)
at ceylon.modules.bootstrap.CeylonRunTool.run(CeylonRunTool.java:292)
at com.redhat.ceylon.common.tools.CeylonTool.run(CeylonTool.java:547)
at com.redhat.ceylon.common.tools.CeylonTool.execute(CeylonTool.java:423)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at com.redhat.ceylon.launcher.Launcher.runInJava7Checked(Launcher.java:108)
at com.redhat.ceylon.launcher.Launcher.run(Launcher.java:38)
at com.redhat.ceylon.launcher.Launcher.run(Launcher.java:31)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at com.redhat.ceylon.launcher.Bootstrap.runVersion(Bootstrap.java:162)
at com.redhat.ceylon.launcher.Bootstrap.runInternal(Bootstrap.java:117)
at com.redhat.ceylon.launcher.Bootstrap.run(Bootstrap.java:93)
at com.redhat.ceylon.launcher.Bootstrap.main(Bootstrap.java:85)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at com.intellij.rt.execution.application.AppMain.main(AppMain.java:147)
Process finished with exit code 2
这是main.ceilon
的内容:
shared void hello() {
print("Hello , World!");
}
编辑 3:
将main.ceilon
的内容改成这样后:
void hello() {
print("Hello, World!");
}
hello();
我在执行 Run
-> Run 'POSTtoFile'
:
时得到了这个输出
和 现在我突然在底部工具栏中有了 Ceylon problems
按钮!它说我有三个问题:
incorrect syntax: no viable alternative at token end of file.
missing declaration or argument name.
not an annotation constructor: hello
我不明白为什么会出现错误,因为我的代码直接来自 Tour of Ceylon.
同意,文档缺少 "Getting started with IntelliJ" 部分,我将在本周修复它。
以下是在 IntelliJ 中 运行 一个简单项目所需的步骤。
通过 File > New > Project
创建一个新项目并选择 Ceylon
类别。
单击 Next
并选择是否要 compile/run 您的项目在 JVM、JS 或两者上:
单击 Next
两次,输入项目名称并单击 Finish
。您的项目现在已准备好托管新的 Ceylon 代码:
在项目视图中,您可以看到一些现有的文件和文件夹:
.ceylon
包含可由 CLI 工具重用的内部配置,大多数情况下您不必直接修改它。
modules
是编译 Ceylon 模块的输出目录。
resource
包含 resources
source
包含 source modules
要将Ceylon代码添加到这个项目中,您可以将文件直接放在source
文件夹下以将它们添加到default
模块中,或者创建一个新模块并将源文件添加到此模块。在这两种情况下,.ceylon
个文件 必须 在 source
文件夹中,而不是直接在项目文件夹中。
- 要将文件添加到
default
模块,source
文件夹中的 right-click 并选择 New > Ceylon File/Declaration
,输入名称(例如 run
) 并单击 OK
。
- 要创建一个新模块,right-click在
source
文件夹中选择New > Ceylon Module
,输入一个像my.ceylon.example
这样的名字,如果没有请调整版本例如 1.0.0
,将 运行 可用单元名称设置为 run
之类的名称,然后单击 OK
。将创建新文件夹 (my/ceylon/example
),以及模块描述符 (module.ceylon
)、包描述符 (package.ceylon
) 和您的 运行 可用单元 (run.ceylon
).
此时,标题为 Ceylon Problems
的工具 window 应该出现在底部工具栏中,表示 IDE 现在知道该项目包含 Ceylon 代码并且是正确配置:
现在项目已经设置好了,是时候实际添加代码了:)。打开 run.ceylon
并添加以下代码:
shared void run() {
print("hello");
}
左侧排水沟中会出现一个绿色箭头,单击该箭头即可 运行 或调试 run
函数:
点击Run 'run'
,这将自动创建一个运行配置,构建项目并打印hello
:
关于您的上一个错误:
incorrect syntax: no viable alternative at token end of file.
就像 Java 及其 main()
方法一样,当您在 Ceylon 中声明一个 运行nable 函数时,您不必实际手动调用它。 Ceylon 运行ner 将为您完成(使用 CLI 时 IDE 或 ceylon run
)。 Ceylon 只接受顶层 声明 ,不接受语句,因此当在文件的根目录中找到此代码时会触发解析错误:
hello();
如果您已经尝试过 web IDE,这会有点误导,因为网络 IDE 会自动将您的代码包装在引擎盖下的 run
函数中,所以上面的语句永远不会是 toplevel 语句。
我已经设法在 'Walkthrough' repository 中编译和执行 Cyelon 代码,方法是右键单击函数并选择 'Run functionName'。
我还尝试创建自己的 Ceylon 项目(名为 POSTtoFile)并查看是否可以从那里执行 'Hello World' 函数。我做不到。我想我必须为我的项目创建某种构建配置,但我不知道要在这些表单字段中填写什么:
Installing Ceylon IDE for IntelliJ指南对这个问题完全没有提及。如果它包含一个名为 'making your first Ceylon'-project 的部分,那就太好了。令人尴尬的是,该文档的所有以前的读者都必须提前知道这些内容。所以我来了!唯一的例外。
在 'Ceylon module' 下拉列表中,有一个名为 module default "unversioned"
的选项。我尝试选择那个,然后单击 'Run' -> 'Run POSTtoFile'。我得到了这个输出:
"C:\Program Files\Java\jdk1.8.0_121\bin\java" -Dceylon.system.repo=C:\Users\Jon\.IdeaIC2016.3\config\plugins\CeylonIDEA\classes\embeddedDist\repo -Didea.launcher.port=7536 "-Didea.launcher.bin.path=C:\Program Files (x86)\JetBrains\IntelliJ IDEA Community Edition 2016.3.3\bin" -Dfile.encoding=windows-1252 -classpath "C:\Users\Jon\.IdeaIC2016.3\config\plugins\CeylonIDEA\classes\embeddedDist\lib\ceylon-bootstrap.jar;C:\Program Files (x86)\JetBrains\IntelliJ IDEA Community Edition 2016.3.3\lib\idea_rt.jar" com.intellij.rt.execution.application.AppMain com.redhat.ceylon.launcher.Bootstrap run --run "" default/unversioned
ceylon run: Module default/unversioned not found in the following repositories:
C:\Users\Jon\.IdeaIC2016.3\config\plugins\CeylonIDEA\classes\embeddedDist\repo
C:\Users\Jon\Auchitect\POSTtoFile\modules
C:\Users\Jon\.ceylon\cache
https://modules.ceylon-lang.org/repo/1
[Maven] Aether
[NPM] npm
Process finished with exit code 1
编辑:
如下图所示,我在 IntelliJ window 底部没有工具栏,也没有看到名为 'Ceylon problems':[=38 的工具 window =]
关于您的其他问题:
- 'modules' 文件夹为空
- 当我单击
Build>Rebuild Project
时,IntelliJ 似乎可以正常工作。这是输出:
- 这些是我的版本号:
当我将以下代码放入
main.ceylon
文件时:共享无效你好(){ 打印("Hello , World!"); }
(抱歉,堆栈溢出不会将其格式化为代码,即使我在每行前面有 4 个空格)
我在函数 hello
的左边看到了绿色箭头,但是我无法点击它。它说 'Nothing here':
编辑 2:
我尝试将源代码文件 (main.ceilon
) 从根目录 (POSTtoFile
) 移动到源目录 (POSTtoFile/source
)。
然后我点击 Run
-> Run 'POSTtoFile'
.
这给了我以下新输出:
"C:\Program Files\Java\jdk1.8.0_121\bin\java" -Dceylon.system.repo=C:\Users\Jon\.IdeaIC2016.3\config\plugins\CeylonIDEA\classes\embeddedDist\repo -Didea.launcher.port=7532 "-Didea.launcher.bin.path=C:\Program Files (x86)\JetBrains\IntelliJ IDEA Community Edition 2016.3.3\bin" -Dfile.encoding=windows-1252 -classpath "C:\Users\Jon\.IdeaIC2016.3\config\plugins\CeylonIDEA\classes\embeddedDist\lib\ceylon-bootstrap.jar;C:\Program Files (x86)\JetBrains\IntelliJ IDEA Community Edition 2016.3.3\lib\idea_rt.jar" com.intellij.rt.execution.application.AppMain com.redhat.ceylon.launcher.Bootstrap run --run "" default/unversioned
ceylon run: String index out of range: 0
java.lang.StringIndexOutOfBoundsException: String index out of range: 0
at java.lang.String.charAt(String.java:658)
at ceylon.modules.api.runtime.AbstractRuntime.invokeRun(AbstractRuntime.java:53)
at ceylon.modules.api.runtime.AbstractRuntime.execute(AbstractRuntime.java:105)
at ceylon.modules.api.runtime.AbstractRuntime.execute(AbstractRuntime.java:101)
at ceylon.modules.Main.execute(Main.java:69)
at ceylon.modules.Main.main(Main.java:42)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.jboss.modules.Module.run(Module.java:308)
at org.jboss.modules.Main.main(Main.java:487)
at ceylon.modules.bootstrap.CeylonRunTool.run(CeylonRunTool.java:292)
at com.redhat.ceylon.common.tools.CeylonTool.run(CeylonTool.java:547)
at com.redhat.ceylon.common.tools.CeylonTool.execute(CeylonTool.java:423)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at com.redhat.ceylon.launcher.Launcher.runInJava7Checked(Launcher.java:108)
at com.redhat.ceylon.launcher.Launcher.run(Launcher.java:38)
at com.redhat.ceylon.launcher.Launcher.run(Launcher.java:31)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at com.redhat.ceylon.launcher.Bootstrap.runVersion(Bootstrap.java:162)
at com.redhat.ceylon.launcher.Bootstrap.runInternal(Bootstrap.java:117)
at com.redhat.ceylon.launcher.Bootstrap.run(Bootstrap.java:93)
at com.redhat.ceylon.launcher.Bootstrap.main(Bootstrap.java:85)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at com.intellij.rt.execution.application.AppMain.main(AppMain.java:147)
Process finished with exit code 2
这是main.ceilon
的内容:
shared void hello() {
print("Hello , World!");
}
编辑 3:
将main.ceilon
的内容改成这样后:
void hello() {
print("Hello, World!");
}
hello();
我在执行 Run
-> Run 'POSTtoFile'
:
和 现在我突然在底部工具栏中有了 Ceylon problems
按钮!它说我有三个问题:
incorrect syntax: no viable alternative at token end of file.
missing declaration or argument name.
not an annotation constructor: hello
我不明白为什么会出现错误,因为我的代码直接来自 Tour of Ceylon.
同意,文档缺少 "Getting started with IntelliJ" 部分,我将在本周修复它。
以下是在 IntelliJ 中 运行 一个简单项目所需的步骤。
通过 File > New > Project
创建一个新项目并选择 Ceylon
类别。
单击 Next
并选择是否要 compile/run 您的项目在 JVM、JS 或两者上:
单击 Next
两次,输入项目名称并单击 Finish
。您的项目现在已准备好托管新的 Ceylon 代码:
在项目视图中,您可以看到一些现有的文件和文件夹:
.ceylon
包含可由 CLI 工具重用的内部配置,大多数情况下您不必直接修改它。modules
是编译 Ceylon 模块的输出目录。resource
包含 resourcessource
包含 source modules
要将Ceylon代码添加到这个项目中,您可以将文件直接放在source
文件夹下以将它们添加到default
模块中,或者创建一个新模块并将源文件添加到此模块。在这两种情况下,.ceylon
个文件 必须 在 source
文件夹中,而不是直接在项目文件夹中。
- 要将文件添加到
default
模块,source
文件夹中的 right-click 并选择New > Ceylon File/Declaration
,输入名称(例如run
) 并单击OK
。 - 要创建一个新模块,right-click在
source
文件夹中选择New > Ceylon Module
,输入一个像my.ceylon.example
这样的名字,如果没有请调整版本例如1.0.0
,将 运行 可用单元名称设置为run
之类的名称,然后单击OK
。将创建新文件夹 (my/ceylon/example
),以及模块描述符 (module.ceylon
)、包描述符 (package.ceylon
) 和您的 运行 可用单元 (run.ceylon
).
此时,标题为 Ceylon Problems
的工具 window 应该出现在底部工具栏中,表示 IDE 现在知道该项目包含 Ceylon 代码并且是正确配置:
现在项目已经设置好了,是时候实际添加代码了:)。打开 run.ceylon
并添加以下代码:
shared void run() {
print("hello");
}
左侧排水沟中会出现一个绿色箭头,单击该箭头即可 运行 或调试 run
函数:
点击Run 'run'
,这将自动创建一个运行配置,构建项目并打印hello
:
关于您的上一个错误:
incorrect syntax: no viable alternative at token end of file.
就像 Java 及其 main()
方法一样,当您在 Ceylon 中声明一个 运行nable 函数时,您不必实际手动调用它。 Ceylon 运行ner 将为您完成(使用 CLI 时 IDE 或 ceylon run
)。 Ceylon 只接受顶层 声明 ,不接受语句,因此当在文件的根目录中找到此代码时会触发解析错误:
hello();
如果您已经尝试过 web IDE,这会有点误导,因为网络 IDE 会自动将您的代码包装在引擎盖下的 run
函数中,所以上面的语句永远不会是 toplevel 语句。