GWT + MVP4g+Ivy:编译错误

Posted

技术标签:

【中文标题】GWT + MVP4g+Ivy:编译错误【英文标题】:GWT + MVP4g+Ivy: compilation error 【发布时间】:2012-05-28 05:30:06 【问题描述】:

我已经通过 ivy 配置为项目添加了 mvp4g jar。它添加正确,并且在 mvp4g 的 gwt.xml 文件中也提到了行。但是我正在尝试编译它给我以下错误的应用程序:

加载继承的模块 'com.mvp4g.Mvp4gModule' [错误] 无法 在您的类路径中找到“com/mvp4g/Mvp4gModule.gwt.xml”;可能是一个 错字,或者您忘记包含源的类路径条目? [错误] 第 13 行:处理元素时出现意外异常 'inherits' com.google.gwt.core.ext.UnableToCompleteException:(参见 以前的日志条目)在 com.google.gwt.dev.cfg.ModuleDefLoader.nestedLoad(ModuleDefLoader.java:278) 在 com.google.gwt.dev.cfg.ModuleDefSchema$BodySchema.__inherits_begin(ModuleDefSchema.java:495) 在 sun.reflect.GeneratedMethodAccessor1.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 在 java.lang.reflect.Method.invoke(Method.java:597) 在 com.google.gwt.dev.util.xml.HandlerMethod.invokeBegin(HandlerMethod.java:230) 在 com.google.gwt.dev.util.xml.ReflectiveParser$Impl.startElement(ReflectiveParser.java:294) 在 com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.startElement(AbstractSAXParser.java:501) 在 com.sun.org.apache.xerces.internal.parsers.AbstractXMLDocumentParser.emptyElement(AbstractXMLDocumentParser.java:179) 在 com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanStartElement(XMLDocumentFragmentScannerImpl.java:1343) 在 com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$FragmentContentDriver.next(XMLDocumentFragmentScannerImpl.java:2755) 在 com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(XMLDocumentScannerImpl.java:648) 在 com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(XMLDocumentFragmentScannerImpl.java:511) 在 com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:808) 在 com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:737) 在 com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:119) 在 com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(AbstractSAXParser.java:1205) 在 com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser.parse(SAXParserImpl.java:522) 在 com.google.gwt.dev.util.xml.ReflectiveParser$Impl.parse(ReflectiveParser.java:347) 在 com.google.gwt.dev.util.xml.ReflectiveParser$Impl.access$200(ReflectiveParser.java:68) 在 com.google.gwt.dev.util.xml.ReflectiveParser.parse(ReflectiveParser.java:418) 在 com.google.gwt.dev.cfg.ModuleDefLoader.nestedLoad(ModuleDefLoader.java:296) 在 com.google.gwt.dev.cfg.ModuleDefLoader$1.load(ModuleDefLoader.java:198) 在 com.google.gwt.dev.cfg.ModuleDefLoader.doLoadModule(ModuleDefLoader.java:324) 在 com.google.gwt.dev.cfg.ModuleDefLoader.loadFromClassPath(ModuleDefLoader.java:156) 在 com.google.gwt.dev.Compiler.run(Compiler.java:196) 在 com.google.gwt.dev.Compiler$1.run(Compiler.java:170) 在 com.google.gwt.dev.CompileTaskRunner.doRun(CompileTaskRunner.java:88) 在 com.google.gwt.dev.CompileTaskRunner.runWithApppropriateLogger(CompileTaskRunner.java:82) 在 com.google.gwt.dev.Compiler.main(Compiler.java:177) [错误] 失败 在解析 XML com.google.gwt.core.ext.UnableToCompleteException 时: (请参阅以前的日志条目)在 com.google.gwt.dev.util.xml.DefaultSchema.onHandlerException(DefaultSchema.java:58) 在 com.google.gwt.dev.util.xml.Schema.onHandlerException(Schema.java:66) 在 com.google.gwt.dev.util.xml.Schema.onHandlerException(Schema.java:66) 在 com.google.gwt.dev.util.xml.HandlerMethod.invokeBegin(HandlerMethod.java:240) 在 com.google.gwt.dev.util.xml.ReflectiveParser$Impl.startElement(ReflectiveParser.java:294) 在 com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.startElement(AbstractSAXParser.java:501) 在 com.sun.org.apache.xerces.internal.parsers.AbstractXMLDocumentParser.emptyElement(AbstractXMLDocumentParser.java:179) 在 com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanStartElement(XMLDocumentFragmentScannerImpl.java:1343) 在 com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$FragmentContentDriver.next(XMLDocumentFragmentScannerImpl.java:2755) 在 com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(XMLDocumentScannerImpl.java:648) 在 com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(XMLDocumentFragmentScannerImpl.java:511) 在 com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:808) 在 com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:737) 在 com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:119) 在 com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(AbstractSAXParser.java:1205) 在 com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser.parse(SAXParserImpl.java:522) 在 com.google.gwt.dev.util.xml.ReflectiveParser$Impl.parse(ReflectiveParser.java:347) 在 com.google.gwt.dev.util.xml.ReflectiveParser$Impl.access$200(ReflectiveParser.java:68) 在 com.google.gwt.dev.util.xml.ReflectiveParser.parse(ReflectiveParser.java:418) 在 com.google.gwt.dev.cfg.ModuleDefLoader.nestedLoad(ModuleDefLoader.java:296) 在 com.google.gwt.dev.cfg.ModuleDefLoader$1.load(ModuleDefLoader.java:198) 在 com.google.gwt.dev.cfg.ModuleDefLoader.doLoadModule(ModuleDefLoader.java:324) 在 com.google.gwt.dev.cfg.ModuleDefLoader.loadFromClassPath(ModuleDefLoader.java:156) 在 com.google.gwt.dev.Compiler.run(Compiler.java:196) 在 com.google.gwt.dev.Compiler$1.run(Compiler.java:170) 在 com.google.gwt.dev.CompileTaskRunner.doRun(CompileTaskRunner.java:88) 在 com.google.gwt.dev.CompileTaskRunner.runWithApppropriateLogger(CompileTaskRunner.java:82) 在 com.google.gwt.dev.Compiler.main(Compiler.java:177) [错误] 处理 XML 时出现意外错误 com.google.gwt.core.ext.UnableToCompleteException:(参见上一个日志 条目)在 com.google.gwt.dev.util.xml.ReflectiveParser$Impl.parse(ReflectiveParser.java:371) 在 com.google.gwt.dev.util.xml.ReflectiveParser$Impl.access$200(ReflectiveParser.java:68) 在 com.google.gwt.dev.util.xml.ReflectiveParser.parse(ReflectiveParser.java:418) 在 com.google.gwt.dev.cfg.ModuleDefLoader.nestedLoad(ModuleDefLoader.java:296) 在 com.google.gwt.dev.cfg.ModuleDefLoader$1.load(ModuleDefLoader.java:198) 在 com.google.gwt.dev.cfg.ModuleDefLoader.doLoadModule(ModuleDefLoader.java:324) 在 com.google.gwt.dev.cfg.ModuleDefLoader.loadFromClassPath(ModuleDefLoader.java:156) 在 com.google.gwt.dev.Compiler.run(Compiler.java:196) 在 com.google.gwt.dev.Compiler$1.run(Compiler.java:170) 在 com.google.gwt.dev.CompileTaskRunner.doRun(CompileTaskRunner.java:88) 在 com.google.gwt.dev.CompileTaskRunner.runWithApppropriateLogger(CompileTaskRunner.java:82) 在 com.google.gwt.dev.Compiler.main(Compiler.java:177)

请帮助我。

【问题讨论】:

你有没有在你的java构建路径中添加了Mvp4gModule的jar? 不,它是由ivy.xml中的依赖添加的。 我对常春藤了解不多,但昨天只有我遇到了同样的例外。我正在使用 Java。所以问题是它期望 jar 在构建路径以及物理位置(在它去查找所有 jar 的 lib 文件夹中)。 &我的问题得到了解决。希望这些信息对您有所帮助。 我也尝试了同样的方法,我的应用程序正确编译,但是当我尝试在控制台上运行它时,出现了两行,并且应用程序的 url 没有生成。错误 [Reflections] - 给定的扫描 url 为空。在配置中设置 url [WARN] 没有提供启动 URL,也没有找到合理的 URL——使用 -startupUrl 【参考方案1】:

分析

翻遍project homepage后,我发现丢失的XML文件实际上位于jar文件中:

unzip -t ./Mvp4g_Layout_Part2/war/WEB-INF/lib/mvp4g-1.4.0.jar | grep xml
testing: com/mvp4g/Mvp4gModule.gwt.xml   OK
testing: META-INF/maven/com.googlecode.mvp4g/mvp4g/pom.xml   OK

这意味着虽然 ivy 可能已经下载了它,但它并不存在于您的编译类路径中。

假设

您尚未指定如何使用 jar,因此我必须假设上述错误是由 ANT javac 任务引发的。

示例

ivy.xml

我会在 ivy 中声明依赖并将其与编译配置相关联,如下所示:

<ivy-module version="2.0">
    <info organisation="com.myspotontheweb" module="demo"/>

    <configurations>
        <conf name="compile" description="Required to compile application"/>
    </configurations>

    <dependencies>
        <dependency org="com.googlecode.mvp4g" name="mvp4g" rev="1.4.0" conf="compile->default"/>
    </dependencies>

</ivy-module>

build.xml

在 ANT 文件中,我将使用 ivy cachepath 任务来创建一个 ivy 托管的 ANT 路径。

<target name="init">
    <ivy:resolve/>

    <ivy:report todir='$ivy.reports.dir' graph='false' xml='false'/>

    <ivy:cachepath pathid="compile.path" conf="compile"/>
</target>

此路径随后在 javac 任务(或任何其他可以接受类路径引用的 ANT 任务)中正常使用

<target name="compile" depends="init">
    <javac srcdir="$src.dir" destdir="$classes.dir" includeantruntime="false" debug="true" classpathref="compile.path"/>
</target>

【讨论】:

以上是关于GWT + MVP4g+Ivy:编译错误的主要内容,如果未能解决你的问题,请参考以下文章

angular 9 库发布错误“尝试发布已由 Ivy 编译的包”

我在 GWT 编译器中编译源代码时遇到错误。“com.reveregroup.gwt.imagepreloader.FitImage 类型没有可用的源代码”

GWT 2.5.1编译始终抛出Java堆空间错误

GWT 应用程序编译问题 - 错误,状态 503

GWT 和 SSL 不起作用?

com.google.gwt.dev.jjs.InternalCompilerException:访问期间出现意外错误