Codenameone Mirah从看似随机的包中生成存根的问题

Codenameone Mirah从看似随机的包中生成存根的问题,codenameone,Codenameone,在构建我的cn1项目时,我遇到了以下异常 redacted-path\nbproject\mirah-build-cn1.xml:152: java.lang.RuntimeException: Could not find stub for interface ItemPrice> at ca.weblite.asm.JavaExtendedStubCompiler$2.visitClassImpl(JavaExtendedStubCompiler.java:764)

在构建我的cn1项目时,我遇到了以下异常

redacted-path\nbproject\mirah-build-cn1.xml:152: 
java.lang.RuntimeException: Could not find stub for interface ItemPrice>
    at ca.weblite.asm.JavaExtendedStubCompiler$2.visitClassImpl(JavaExtendedStubCompiler.java:764)
    at ca.weblite.asm.JavaExtendedStubCompiler$2.visitClass(JavaExtendedStubCompiler.java:695)
    at com.sun.tools.javac.tree.JCTree$JCClassDecl.accept(JCTree.java:720)
    at com.sun.source.util.TreePathScanner.scan(TreePathScanner.java:68)
    at com.sun.source.util.TreeScanner.scan(TreeScanner.java:91)
    at com.sun.source.util.TreeScanner.scanAndReduce(TreeScanner.java:99)
    at com.sun.source.util.TreeScanner.visitCompilationUnit(TreeScanner.java:120)
    at ca.weblite.asm.JavaExtendedStubCompiler$2.visitCompilationUnit(JavaExtendedStubCompiler.java:278)
    at com.sun.tools.javac.tree.JCTree$JCCompilationUnit.accept(JCTree.java:550)
    at com.sun.source.util.TreePathScanner.scan(TreePathScanner.java:68)
    at com.sun.source.util.TreeScanner.scan(TreeScanner.java:91)
    at ca.weblite.asm.JavaExtendedStubCompiler.compile(JavaExtendedStubCompiler.java:887)
    at ca.weblite.asm.JavaExtendedStubCompiler.compileFile(JavaExtendedStubCompiler.java:176)
    at ca.weblite.asm.JavaExtendedStubCompiler.compileDirectory(JavaExtendedStubCompiler.java:213)
    at ca.weblite.asm.JavaExtendedStubCompiler.compileDirectory(JavaExtendedStubCompiler.java:216)
    at ca.weblite.asm.JavaExtendedStubCompiler.compileDirectory(JavaExtendedStubCompiler.java:216)
    at ca.weblite.asm.JavaExtendedStubCompiler.compileDirectory(JavaExtendedStubCompiler.java:216)
    at ca.weblite.asm.JavaExtendedStubCompiler.compileDirectory(JavaExtendedStubCompiler.java:216)
    at ca.weblite.asm.JavaExtendedStubCompiler.compileDirectory(JavaExtendedStubCompiler.java:195)
    at ca.weblite.asm.WLMirahCompiler.compile(WLMirahCompiler.java:208)
    at ca.weblite.mirah.ant.MirahcTask.execute(MirahcTask.java:158)
    at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:292)
    at sun.reflect.GeneratedMethodAccessor276.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at org.apache.tools.ant.dispatch.DispatchUtils.execute(DispatchUtils.java:99)
    at org.apache.tools.ant.Task.perform(Task.java:350)
    at org.apache.tools.ant.Target.execute(Target.java:449)
    at org.apache.tools.ant.Target.performTasks(Target.java:470)
    at org.apache.tools.ant.Project.executeSortedTargets(Project.java:1388)
    at org.apache.tools.ant.Project.executeTarget(Project.java:1361)
    at org.apache.tools.ant.helper.DefaultExecutor.executeTargets(DefaultExecutor.java:41)
    at org.apache.tools.ant.Project.executeTargets(Project.java:1251)
    at org.apache.tools.ant.module.bridge.impl.BridgeImpl.run(BridgeImpl.java:261)
    at org.apache.tools.ant.module.run.TargetExecutor.run(TargetExecutor.java:574)
    at org.netbeans.core.execution.RunClassThread.run(RunClassThread.java:128)
构建抱怨没有找到接口
ItemPrice
的存根,但是这个接口没有从我正在为其生成
数据映射器的包或类中引用。
我进一步研究了
build/mirah\u tmp
文件夹。实际上,Mirah尝试在不同的包中为非引用接口生成存根

为了演示这个问题,我用一个基本的
Hello World
cn1模板创建了以下内容

在这个简化的项目结构中,我有以下三个包:

1. com.company.project
    MyApplication.java
2. com.company.project.firstmodel
    AuthContext.java
    DataMappers.mirah
3. com.company.project.secondmodel
    Address.java
DataMappers.mirah
仅引用
AuthContext
及其包。并且不以任何方式引用

在构建时,查看
build/mirah tmp
,似乎也意外地为
Address.java
生成了存根

我的印象是mirah试图为我的项目中的每个文件生成存根(由于
没有找到接口的存根
,它已经失败了,所以还需要验证)

感谢您的帮助

编辑:将我的应用程序源文件移动到新项目后,在netbeans启动时看到的屏幕截图。

Mirah集成首先为项目中的所有java类编译存根。然后,它使用已编译的java存根作为依赖项来编译mirah文件。然后它完成最后一步,完全编译所有java文件。第一步,编译存根,需要编译项目中的所有文件,因为它还不知道mirah文件引用了哪些文件——因为这发生在第2步


如果您可以编写一个复制错误的测试用例,我可以尝试进一步排除错误。

Mirah集成的工作原理是首先编译项目中所有java类的存根。然后,它使用已编译的java存根作为依赖项来编译mirah文件。然后它完成最后一步,完全编译所有java文件。第一步,编译存根,需要编译项目中的所有文件,因为它还不知道mirah文件引用了哪些文件——因为这发生在第2步


如果你能组合一个测试用例来重现你的错误,我可以尝试进一步排除错误。

我让Steve回答,因为我对Mirah不够熟悉,但您的一个文件中是否有一个任性的
字符?我让Steve回答,因为我对Mirah不够熟悉,但您的一个文件中是否有一个任性的
字符?谢谢,我在
Address.java
中使用接口引用进行了测试,这似乎有效。根据上面的解释,这是有意义的,因为所有java类都有预编译步骤。但我的项目仍然失败,我尝试启动一个新项目并将源文件移动到那里。由于我在最初的问题帖子中共享了stacktrace,所以该项目无法构建。但我现在注意到,在netbeans启动时,该项目以红色突出显示,并且有一条抱怨消息“在项目(projectName)中找不到build mirah文件/文件夹”。我将用截图更新最初的帖子,这些目录将在mirah成功构建时创建。解决第一个问题,第二个问题会自己解决。我花了多一点时间。我能够复制以下项目。如果您拉这个回购和构建,构建最初可能会成功(至少在我的机器上)。但是如果您向DataMappers.mirah+save添加一个新行。然后删除添加的换行符,如果您希望+重新保存(即以任何方式修改.mirah文件),那么项目将不再为我生成。我希望您能够复制。Steve,请告诉我您是否有机会运行上面提供的基于MirahTest6的测试用例。谢谢,我在
Address.java
中使用接口引用进行了测试,这似乎很有效。根据上面的解释,这是有意义的,因为所有java类都有预编译步骤。但我的项目仍然失败,我尝试启动一个新项目并将源文件移动到那里。由于我在最初的问题帖子中共享了stacktrace,所以该项目无法构建。但我现在注意到,在netbeans启动时,该项目以红色突出显示,并且有一条抱怨消息“在项目(projectName)中找不到build mirah文件/文件夹”。我将用截图更新最初的帖子,这些目录将在mirah成功构建时创建。解决第一个问题,第二个问题会自己解决。我花了多一点时间。我能够复制以下项目。如果您拉这个回购和构建,构建最初可能会成功(至少在我的机器上)。但是如果您向DataMappers.mirah+save添加一个新行。然后删除添加的换行符,如果您希望+重新保存(即以任何方式修改.mirah文件),那么项目将不再为我生成。我希望您能够复制。Steve,如果您有机会运行上面提供的基于MirahTest6 repo的测试用例,请告诉我
package com.company.project.firstmodel

data_mapper AuthContext:AuthContextMapper