锡兰 运行: 找不到模块 default/unversioned

ceylon run: Module default/unversioned not found

今天我在我的 macbook 上安装了 intelliJ ceylon IDE。编译我的项目时,我收到以下消息

/Library/Java/JavaVirtualMachines/jdk1.7.0_25.jdk/Contents/Home/bin/java "-Dceylon.system.repo=/Users/Laust/Library/ApplicationSupport/IdeaIC2016.3/CeylonIDEA/classes/embeddedDist/repo" -Didea.launcher.port=7533 "-Didea.launcher.bin.path=/Applications/IntelliJ IDEA CE.app/Contents/bin" -Dfile.encoding=UTF-8 -classpath "/Users/Laust/Library/Application Support/IdeaIC2016.3/CeylonIDEA/classes/embeddedDist/lib/ceylon-bootstrap.jar:/Applications/IntelliJ IDEA CE.app/Contents/lib/idea_rt.jar" com.intellij.rt.execution.application.AppMain com.redhat.ceylon.launcher.Bootstrap run --run main default/unversioned
ceylon run: Module default/unversioned not found in the following repositories:
 /Users/Laust/Library/Application Support/IdeaIC2016.
3/CeylonIDEA/classes/embeddedDist/repo
 /Users/Laust/.ceylon/cache
 https://modules.ceylon-lang.org/repo/1
 [Maven] Aether
 [NPM] npm

Process finished with exit code 1

代码在我的另一台计算机上执行良好 (windows 7)。

文件夹 'modules' 包含以下内容:

default
    default.car
    default.car.sha1
    default.src
    default.src.sha1

和我的构建配置 looks as follows。

这是我的代码(在文件 source/main.ceylon 中)

shared void main() {
    print("Generating pretty sweet g-code:");

    {Gcommand+} myGcommands = {
        G00( Vector3(0.0, 0.0, 0.0) ),
        G00( Vector3(9.0, 0.0, 0.0) ),
        G00( Vector3(9.0, 9.0, 0.0) ),
        G00( Vector3(0.0, 9.0, 0.0) ),
        G00( Vector3(0.0, 0.0, 0.0) )
    };

    GcodeProgram myGcodeProgram = GcodeProgram( *myGcommands );

    print(myGcodeProgram.toString());
}

"A carthesian coordinate class"
alias X => Float;
alias Y => Float;
alias Z => Float;
class Vector3(shared X x, shared Y y, shared Z z) {
}

"An abstract spec class for all G-code command classes"
abstract class Gcommand() {
    shared formal String toString();
}

"G-code command for moving in a straight line at rapid speed"
class G00( Vector3 endPoint ) extends Gcommand() {
    toString() => "G0 " + "X" + endPoint.x.string
                        + "Y" + endPoint.y.string
                        + "Z" + endPoint.z.string + "\n";
}

class GcodeProgram( Gcommand+ gcommands ) {

    variable String stringifiedGcodeProgram = "";

    shared String toString() {
        for (gcommand in gcommands) {
            stringifiedGcodeProgram = stringifiedGcodeProgram + gcommand.toString();
        }
    return stringifiedGcodeProgram;
    }
}

这可能是 IntelliJ 插件无法正确处理 "default" 模块的错误。我们倾向于不经常使用默认模块,因为它们比常规模块更受限制。

尝试创建一个模块并将您的代码移至其中。这很可能会解决问题。如果是这样,您可以在此处打开一个问题以修复此错误:https://github.com/ceylon/ceylon-ide-intellij/issues/new

中,第一个(也是唯一一个)答案说明了如何创建新模块。

我对该回答有几点意见:

  • 开始新项目时,您可能不需要为您的模块使用复杂的嵌套命名层次结构。如果您在模块名称中使用句点(例如 my.ceylon.example),您就会明白这一点,所以我建议您坚持使用一个简单的名称,例如 main.
  • 在创建新模块时,您将(除其他事项外)被要求指定 'Runnable unit name'。该字段的目的是告诉 IntelliJ 在启动程序时应该执行哪个模块的 classes。换句话说,这将成为您程序的入口点。一个合适的名称可以(也)是 main.
  • 锡兰项目分为模块,模块分为包,包分为classes和top-level函数。当您创建一个模块时,会在该模块下自动创建一个包。此模块下您的代码文件的路径将为 'source/moduleName/packageName'。创建新模块时,您不必为模块中的第一个包指定名称。相反,包的名称与您的模块名称相同。因此,名为 'main' 的模块将具有此路径:source/main/main 作为其代码文件的路径。
  • 在您的新模块文件夹中(例如 source/main/main)将创建三个新文件。找到以您之前选择的 'Runnable unit name' 命名的文件。 您的代码应放入此文件。此外,您的代码应该有一个 class,其名称与您选择的 'Runnable unit name'.
  • 完全相同
  • 答案使用了花哨的术语 'runnable unit',他指的是包含锡兰代码的文件。
  • 记得删除包含旧 'default' 模块的文件,然后再尝试 运行 新模块。
  • 模块名称不能以大写字母开头。
  • modules/ 是编译代码所在的输出目录。它是在构建项目时从 source/ 中的代码自动重新创建的。

这里的项目设置似乎有问题。请注意正在搜索的存储库列表:

Module default/unversioned not found in the following repositories:
 /Users/Laust/Library/Application Support/IdeaIC2016.3/CeylonIDEA/classes/embeddedDist/repo
 /Users/Laust/.ceylon/cache
 https://modules.ceylon-lang.org/repo/1
 [Maven] Aether
 [NPM] npm

我希望看到 your-project-dir/modules 形式的回购作为该列表中的第二个条目,但它不在那里。

也就是说,ceylon run不是在编译的.car所在的modules目录中查找。所以问题是为什么列表中缺少该回购协议。

您在项目结构 > 模块 > Ceylon > 存储库中看到了什么?

您提供的屏幕截图显示 运行 配置不基于任何 IntelliJ 模块(Use classpath of module 设置为 [none])。这意味着配置将 而不是 运行 在 modules 目录所在的项目文件夹中。该目录包含编译后的代码,当您向 运行 default 模块询问时,ceylon run 将查找该目录。

一般来说,您应该避免手动创建 运行 配置。通过单击 运行 可用函数名称旁边的绿色箭头,Ceylon IDE 将自动创建 并配置 正确的 运行 配置。

要修复您现有的 运行 配置,只需 select 在标记为 Use classpath of module 的字段中包含您的代码的 IntelliJ 模块。

另请参阅 getting started guide 了解有关如何开始使用适用于 IntelliJ 的 Ceylon IDE 的更多信息。