当前位置: 首页 > 知识库问答 >
问题:

米拉的问题

孙光临
2023-03-14

我使用代号为One的Mirah库主要作为Json和Java类之间的对象映射器。

我遇到了Mirah试图映射. mirah类中未声明的类的问题。例如,我的. mirah类有一个产品的数据映射器

数据映射器产品:ProductMapper

但错误是抱怨IUser接口而不是Products类!首先,我不明白为什么Mirah会抱怨一个没有声明为数据映射器的类。我错过了什么吗?请记住在我当前的代码中,产品只有原始数据类型变量,绝对没有引用IUser接口或User实现类。

nbproject\mirah-build-cn1。xml:152:java。lang.RuntimeException:在ca.weblite上找不到接口IUser的存根。asm。JavaExtendedStubCompiler 2美元。com上的visitClass(JavaExtendedStubCompiler.java:694)。太阳工具。javac。树JCTree$JCClassDecl。在com上接受(JCTree.java:720)。太阳来源util。树形扫描仪。在com上扫描(TreePathScanner.java:68)。太阳来源util。特雷斯坎纳。在com上扫描(TreeScanner.java:91)。太阳来源util。特雷斯坎纳。com上的scanAndReduce(TreeScanner.java:99)。太阳来源util。特雷斯坎纳。访问ca.weblite上的ComplationUnit(TreeScanner.java:120)。asm。JavaExtendedStubCompiler 2美元。访问com上的complationUnit(JavaExtendedStubCompiler.java:275)。太阳工具。javac。树JCTree$JCCompilationUnit。在com上接受(JCTree.java:550)。太阳来源util。树形扫描仪。在com上扫描(TreePathScanner.java:68)。太阳来源util。特雷斯坎纳。在ca.weblite上扫描(TreeScanner.java:91)。asm。JavaExtendedStubCompiler。在ca.weblite上编译(JavaExtendedStubCompiler.java:797)。asm。JavaExtendedStubCompiler。compileFile(JavaExtendedStubCompiler.java:174)位于ca.weblite。asm。JavaExtendedStubCompiler。compileDirectory(JavaExtendedStubCompiler.java:211)位于ca.weblite。asm。JavaExtendedStubCompiler。compileDirectory(JavaExtendedStubCompiler.java:214)位于ca.weblite。asm。JavaExtendedStubCompiler。compileDirectory(JavaExtendedStubCompiler.java:214)位于ca.weblite。asm。JavaExtendedStubCompiler。位于ca.weblite的compileDirectory(JavaExtendedStubCompiler.java:214)。asm。JavaExtendedStubCompiler。compileDirectory(JavaExtendedStubCompiler.java:214)位于ca.weblite。asm。JavaExtendedStubCompiler。compileDirectory(JavaExtendedStubCompiler.java:193)位于ca.weblite。asm。WLMirahCompiler。在ca.weblite上编译(WLMirahCompiler.java:208)。米拉。蚂蚁米拉赫任务。在org上执行(MirahcTask.java:158)。阿帕奇。工具。蚂蚁未知元素。在sun上执行(UnknowneElement.java:292)。反映生成方法处理器68。在sun上调用(未知源)。反映DelegatingMethodAccessorImpl。在java上调用(DelegatingMethodAccessorImpl.java:43)。朗,反思一下。方法在org上调用(Method.java:497)。阿帕奇。工具。蚂蚁派遣调度。在org上执行(DispatchUtils.java:106)。阿帕奇。工具。蚂蚁任务在org上执行(Task.java:348)。阿帕奇。工具。蚂蚁目标在org上执行(Target.java:435)。阿帕奇。工具。蚂蚁目标performTasks(Target.java:456)位于org。阿帕奇。工具。蚂蚁项目org上的executeSortedTargets(Project.java:1393)。阿帕奇。工具。蚂蚁项目org上的executeTarget(Project.java:1364)。阿帕奇。工具。蚂蚁帮手违约执行人。org上的executeTargets(DefaultExecutor.java:41)。阿帕奇。工具。蚂蚁项目org上的executeTargets(Project.java:1248)。阿帕奇。工具。蚂蚁单元桥impl。布里奇普勒。在org上运行(BridgeImpl.java:286)。阿帕奇。工具。蚂蚁单元跑目标执行器。在org上运行(TargetExecutor.java:555)。上网本。果心处决运行类线程。运行(RunClassThread.java:153)生成失败(总时间:10秒)

我还想提一下,我高度怀疑清理项目可能不是清理所有Mirah生成的类。由于上述错误,我根本无法构建我的应用程序,我尝试从我的项目中删除“. mirah”类,然后尝试清理和重建,但从那时起我仍然收到同样的错误。

我能够让项目重新编译的唯一方法是启动一个全新的项目,并将我的源文件移到那里。米拉下课了。

我很欣赏你的见解!

更多细节更新如下

嗨,史蒂夫。非常感谢您的反馈!我花了一些时间试图找到这个问题。我认为这个问题与泛型有关。据我所知,泛型类型在编译时被替换,所以我猜Codename One会很好地支持泛型。此外,我的代码在尝试走Mirah路线之前编译得很好。我真的认为Mirah是一个绝妙的主意。

这里有几个重新创建问题的步骤。我启动了一个CN1 Hello world项目并创建了以下类

1)IHouse

import java.util.List;

public interface IHouse<W extends IWindow> {

public int getHouseColor();

public void setHouseColor(int color);

public List<W> getWindows(); 

public void setWindows(List<W> windows);

}

2)窗口

public interface IWindow {

public int getWindowColor();

public void setWindowColor(int newColor);

public String getShape();
}

3) 圆窗

public class RoundWindow implements IWindow {

private int windowColor;
private String shape;

public RoundWindow() {
    String shape = "ROUND";
}

@Override
public int getWindowColor() {
    return windowColor;
}

@Override
public void setWindowColor(int newColor) {
    windowColor = newColor;
}

@Override
public String getShape() {
    return shape;
}

}

4) 方窗

public class SquareWindow implements IWindow {

private int windowColor;
private String shape;

public SquareWindow() {
    String shape = "SQUARE";
}

@Override
public int getWindowColor() {
    return windowColor;
}

@Override
public void setWindowColor(int newColor) {
    windowColor = newColor;
}

@Override
public String getShape() {
    return shape;
}
}

5) 房子

public class House implements IHouse<RoundWindow> {

private int houseColor;

List<RoundWindow> windows;

@Override
public int getHouseColor() {
    return houseColor;
}

@Override
public void setHouseColor(int color) {
    houseColor = color;
}

@Override
public List<RoundWindow> getWindows() {
    return windows;
}

@Override
public void setWindows(List<RoundWindow> windows) {
    this.windows = windows;
}

}

回顾一下,我有一个IHouse接口支持实现IWindow的任何类型的窗口。然后实现IHouse接口的House类可以严格指定它支持/使用的窗口。

在添加Mirah插件之前,该代码在CN1中编译良好。虽然我收到了一个与我之前在添加Mirah时解释的相同的错误。

执行此行时发生以下错误:C:\Users\location\NetBeansProjects\Test\nbproject\mirah build。xml:51:java。lang.RuntimeException:在ca.weblite上找不到接口IHouse的存根。asm。JavaExtendedStubCompiler 2美元。com上的visitClass(JavaExtendedStubCompiler.java:694)。太阳工具。javac。树JCTree$JCClassDecl。在com上接受(JCTree.java:720)。太阳来源util。树形扫描仪。在com上扫描(TreePathScanner.java:68)。太阳来源util。特雷斯坎纳。在com上扫描(TreeScanner.java:91)。太阳来源util。特雷斯坎纳。com上的scanAndReduce(TreeScanner.java:99)。太阳来源util。特雷斯坎纳。访问ca.weblite上的ComplationUnit(TreeScanner.java:120)。asm。JavaExtendedStubCompiler 2美元。访问com上的complationUnit(JavaExtendedStubCompiler.java:275)。太阳工具。javac。树JCTree$JCCompilationUnit。在com上接受(JCTree.java:550)。太阳来源util。树形扫描仪。在com上扫描(TreePathScanner.java:68)。太阳来源util。特雷斯坎纳。在ca.weblite上扫描(TreeScanner.java:91)。asm。JavaExtendedStubCompiler。在ca.weblite上编译(JavaExtendedStubCompiler.java:797)。asm。JavaExtendedStubCompiler。compileFile(JavaExtendedStubCompiler.java:174)位于ca.weblite。asm。JavaExtendedStubCompiler。compileDirectory(JavaExtendedStubCompiler.java:211)位于ca.weblite。asm。JavaExtendedStubCompiler。compileDirectory(JavaExtendedStubCompiler.java:214)位于ca.weblite。asm。JavaExtendedStubCompiler。compileDirectory(JavaExtendedStubCompiler.java:214)位于ca.weblite。asm。JavaExtendedStubCompiler。compileDirectory(JavaExtendedStubCompiler.java:214)位于ca.weblite。asm。JavaExtendedStubCompiler。compileDirectory(JavaExtendedStubCompiler.java:214)位于ca.weblite。asm。JavaExtendedStubCompiler。compileDirectory(JavaExtendedStubCompiler.java:193)位于ca.weblite。asm。WLMirahCompiler。在ca.weblite上编译(WLMirahCompiler.java:208)。米拉。蚂蚁米拉赫任务。在org上执行(MirahcTask.java:158)。阿帕奇。工具。蚂蚁未知元素。在sun上执行(UnknowneElement.java:292)。反映生成方法访问器323。在sun上调用(未知源)。反映DelegatingMethodAccessorImpl。在java上调用(DelegatingMethodAccessorImpl.java:43)。朗,反思一下。方法在org上调用(Method.java:497)。阿帕奇。工具。蚂蚁派遣调度。在org上执行(DispatchUtils.java:106)。阿帕奇。工具。蚂蚁任务在org上执行(Task.java:348)。阿帕奇。工具。蚂蚁taskdefs。顺序的在org上执行(Sequential.java:68)。阿帕奇。工具。蚂蚁未知元素。在sun上执行(UnknowneElement.java:292)。反映生成方法访问器323。在sun上调用(未知源)。反映DelegatingMethodAccessorImpl。在java上调用(DelegatingMethodAccessorImpl.java:43)。朗,反思一下。方法在org上调用(Method.java:497)。阿帕奇。工具。蚂蚁派遣调度。在org上执行(DispatchUtils.java:106)。阿帕奇。工具。蚂蚁任务在org上执行(Task.java:348)。阿帕奇。工具。蚂蚁taskdefs。例如。在org上执行(MacroInstance.java:396)。阿帕奇。工具。蚂蚁未知元素。在sun上执行(UnknowneElement.java:292)。反映生成方法访问器323。在sun上调用(未知源)。反映DelegatingMethodAccessorImpl。在java上调用(DelegatingMethodAccessorImpl.java:43)。朗,反思一下。方法在org上调用(Method.java:497)。阿帕奇。工具。蚂蚁派遣调度。在org上执行(DispatchUtils.java:106)。阿帕奇。工具。蚂蚁任务在org上执行(Task.java:348)。阿帕奇。工具。蚂蚁目标在org上执行(Target.java:435)。阿帕奇。工具。蚂蚁目标performTasks(Target.java:456)位于org。阿帕奇。工具。蚂蚁项目org上的executeSortedTargets(Project.java:1393)。阿帕奇。工具。蚂蚁项目org上的executeTarget(Project.java:1364)。阿帕奇。工具。蚂蚁帮手违约执行人。org上的executeTargets(DefaultExecutor.java:41)。阿帕奇。工具。蚂蚁项目org上的executeTargets(Project.java:1248)。阿帕奇。工具。蚂蚁单元桥impl。布里奇普勒。在org上运行(BridgeImpl.java:286)。阿帕奇。工具。蚂蚁单元跑目标执行器。在org上运行(TargetExecutor.java:555)。上网本。果心处决运行类线程。运行(RunClassThread.java:153)生成失败(总时间:9秒)

很少有人注意到,如果我删除House类,代码构建得很好(最后显示“build successful”),但我看到了以下警告。我相信这是因为我们试图预编译一个通用接口,而我们还不知道w的确切类型(直到运行时)。这可能是问题的根本原因。

Failed to get signature for method 
public List<W> getWindows();
Failed to get signature for method 
public void setWindows(List<W> windows);

最后,更改我的模型设计并完全摆脱泛型可以让我的代码再次编译而没有任何Mirah抱怨。在我的实际项目中,出于许多原因,我想保留我当前的设计(使用泛型)。

是否可以将Mirah Json转换为Java工具与泛型一起使用?

提前感谢您抽出时间!

共有1个答案

谷梁晟
2023-03-14

Mirah netbean插件允许项目中的双向mirah-java依赖项。为了实现这一点,它首先编译项目中java源代码的“存根”,以便在mirah编译步骤中从Mirah引用它们。mirah完成编译到. class后,它会执行“真正的”java编译步骤,该步骤引用已编译的mirah文件。这就是它引用IUser类的原因...这是阻塞它的“预编译”步骤。

该错误表示它在预编译java存根时找不到IUser类。我必须查看项目才能知道原因。

 类似资料:
  • 问题内容: 我正在尝试使用Paramiko连接到远程主机并执行许多文本文件替换。 其中一些命令需要作为sudo运行,从而导致: sudo:对不起,您必须有一个tty才能运行sudo 我可以使用-t开关和ssh强制进行伪tty分配。 使用paramiko可以做同样的事情吗? 问题答案: 我认为您想要对象的方法(我想提供一个URL,但是lag.net上的paramiko文档非常繁琐,只是不会为我显示文

  • 我使用vue.js创建了一个表单,用户可以在其中保存他们的答案并返回。我在我的Vue模板中有一个下拉列表,并且V模型被绑定到一个计算的属性。它在其他浏览器中运行良好,但在IE中,下拉菜单在加载页面时不会显示先前选择的答案。如果他们再次回答,它很好,但我希望他们之前选择的答案显示出来。 possibleanswers是组件的属性,answerLocal是计算属性。Responsions是组件的属性,

  • #软件开发2024笔面经# 我真是服了我的猪脑子了,考试的时候脑子一团浆糊,考完出来一会就写好了 #小米前端笔试# 编程1:以最少的购买数量花光手里的钱,过了一半,剩下的不知道咋回事 编程2:偏爱字符,给出几个字符称为偏爱字符,对一个字符串,把不属于偏爱字符的字符 变成离他最近的偏爱字符,写的时候没注意边界问题一直卡着,出来了10分钟就写好了 也许这是我此生仅有的接触大厂的机会了…

  • 我选择了“使用C进行编程原理和实践”,并且正在做一个涉及埃拉托色尼筛的早期问题,我有意想不到的输出,但我无法确定问题到底是什么。这是我的代码: 这个问题目前只要求我使用这种方法找到最大100的质数。我还尝试使用当前的“goto”方法在某些情况下跳出双循环,我还尝试在检查循环之后使用带有if语句的布尔标志,并简单地使用“继续”语句,但都没有任何效果。 (老实说,我想既然人们说goto是邪恶的,也许它

  • 我对Jmete有点陌生,我正在尝试在Jmete上做一个简单的SOAP/XML-RPC请求。我使用了我在互联网上找到的一个示例代码,看起来工作得很好(至少在Chrome使用Wizlet似乎没有问题),但是当我使用在Jmete中的元素上生成插件的肥皂请求时……那就不同了。如果有人能告诉我这个问题,那就太棒了。 这是WSDL的代码: 这是我发送的请求和响应错误。 网址:http://localhost:

  • 由于某种原因,我的WordPress生成的菜单在我尝试显示下拉菜单时出现了一些问题。父菜单项变为全宽,然后覆盖其他项。这是悬停状态下的样子: 下面是对代码的修改:https://jsfidle.net/j55scjeq/ 以下是CSS: 下面是HTML: 有人能帮我找到解决办法吗。我只希望子UL显示在一个漂亮的列中,与下面的内容重叠。 我想不通。我不确定这是HTML还是CSS的问题。:/ 非常感谢