尝试使用MUnit 2.1编译自动生成的示例测试(使用标准haxelib run munit gen
制作,然后使用haxelib run munit t
使用或不使用-coverage
运行)以进行HaxeFlixel游戏(闪存目标) .2在Windows 7上使用Haxe 3.2.1。我得到:
HaxeWrapper.hx:73: --macro:1: character 0 : Invalid package : subfolder should be <empty>
...其中subfolder
是我的主source
目录的子文件夹。游戏本身编译得很好,在subfolder.*
(和subfolder.nestedsubfolder.*
等)包中引用了所有地方,但source
本身的一些类只有package;
命名空间
给出的行号并不完全告诉我在项目中可能需要修复的内容......在我尝试挖掘(在我的头上)到HaxeWrapper.hx之前,这是一个已知的问题,有子文件夹/不同的包项目中的名称,还是什么?
BTW我还有另一个项目没有发生这种情况,但在该项目中,source
只包含一个子文件夹,其中的所有内容都共享相同的包命名空间(即package subfolder;
)。 (因此我的问题。)
更新
我之前有mcover也在处理我的项目,只是为了手动测试指标。从那以后它增长了很多,因此,我将事物组织到包子文件夹中。与此同时,我没有尝试启用mcover,因为它在调试过程中使步进更加繁琐。现在,当我重新启用mcover时,我的项目将无法编译,提供与上面相同的错误消息,但没有HaxeWrapper.hx:73:
前缀。
答案 0 :(得分:2)
我认为这意味着您将文件自动生成subfolder
,但不包含package subfolder;
。我之前从未听说过mcover,但似乎在某些代码导致Haxe在文件系统中查找Haxe类文件并且Haxe发现该文件没有package
时会产生类似的错误消息语句匹配Haxe找到的路径。但是,它会产生与您预期不同的错误。
subfolder/MyClass.hx
:
class MyClass {
public static function main() {
Sys.println("hi");
}
}
输出:
>haxe -cpp x.cpp subfolder.MyClass
Invalid commandline class : subfolder.MyClass should be MyClass
这是我希望在尝试访问MyClass
时看到的错误。但是,只有当Haxe最初尝试解析指定为入口点的类名时,才会显示此有用的错误消息。
假设您仍然如上所述subfolder/MyClass.hx
,请添加一个包含正确package
语句的新类:
subfolder/AnotherClass.hx
:
package subfolder;
class AnotherClass {
static function main() {
MyClass.main();
}
}
输出:
>haxe -cpp x.cpp subfolder.AnotherClass
subfolder/AnotherClass.hx:5: characters 4-11 : Invalid package : subfolder should be <empty>
如果我转到AnotherClass.hx:5:5
(characters 4-11
似乎是0索引?),我会看到MyClass
。所以它真正令人窒息的是它希望加载subfolder.MyClass
,但在加载模块后,模块声称其完全限定名称为MyClass
,因为它没有package
语句。 / p>
所以,据我所知,你的mcover东西正在生成缺少package
语句的文件。如果它有-namespace
或-root-package
这样的选项,或者您可以告诉它分析.
目录而不是./subfolder
,那么它可能会表现得更好。您是否将mcover工具传递给传递给haxe -cp
的值以外的值?
另一个想法,基于mcover的作用,是它引用了项目中缺少package subfolder;
的.hx文件。如果我将AnotherClass.hx
更改为不调用MyClass.main()
,我可以使用subfolder.AnotherClass
作为入口点成功编译。似乎Haxe甚至不会尝试解析/读取MyClass.hx
如果它正在分析的其他代码没有引用它。使用覆盖工具,该工具可能会尝试包装/自动生成引用它发现的所有文件的代码,甚至是Haxe本身通常甚至不编译的文件。当然,关键在于弄清楚哪些代码永远不会覆盖任何覆盖/从不运行; - )。
总而言之,如果您可以在错误消息引用的源代码位置找到类名,然后根据类名检查Haxe将加载的.hx
文件,您可能会发现缺少package
文件1}}陈述。虽然我不确定当错误没有源代码位置时你能做什么。