加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – 我可以在没有入口点的情况下强制进行GWT编译吗? (验证

发布时间:2020-12-15 04:19:04 所属栏目:Java 来源:网络整理
导读:这个问题与 this question有关,但不是重复. 我的问题略有不同;我有一个“实用程序模块”,在客户端和服务器代码之间共享,它不包含特定于GWT的代码. 我理解通常情况下,所有的资源都被拖入一个特定的项目中,一切都在一起编译.但是有一个问题:当我编译主项目时,
这个问题与 this question有关,但不是重复.

我的问题略有不同;我有一个“实用程序模块”,在客户端和服务器代码之间共享,它不包含特定于GWT的代码.

我理解通常情况下,所有的资源都被拖入一个特定的项目中,一切都在一起编译.但是有一个问题:当我编译主项目时,我只知道我的实用程序项目是否是“GWT兼容”.这太迟了;我甚至没有开始主要项目,但我想知道在我向我的SCM“提交”之前,我的实用程序项目是“GWT兼容”.

换句话说,我想验证实用程序项目的GWT兼容性,独立于它在单独项目(模块)中的使用.

GWT没有覆盖JRE的很大一部分,并且在实用程序模块中特别可能使用非GWT兼容的类或方法.这就是我想要验证的内容.

编辑:我想,我可以添加一个“虚拟入口点”,但这使得该项目依赖于GWT,我不想这样做,因为它是“通用”代码,也可供那些不使用的人使用使用GWT.如果重要,我使用Maven作为构建系统.

EDIT2:无论我做什么,我只会通过入口点获得真正的编译/验证(不需要引用任何类).既不是< force> true< / force>,也不是< failOnError> true< / failOnError>会做.有没有办法可以为共享项目定义该入口点,只有gwt-maven-plugin才能看到它,而不是javac(以免在Java代码中添加不需要的依赖项)?

解决方法

编译器实际上总是访问源路径上的所有代码(注意:与类路径不完全相同),从所请求的模块开始,使用任何< source>标签,然后检查每个< inherits>一路上.如果它发现某些不兼容或不可编译的内容,它会将其标记为已损坏,并继续前进 – 只要实际上没有任何内容依赖它(即EntryPoint,或者EntryPoint所依赖的内容),您将会只看到这条消息:

Validating newly compiled units
      Ignored 1 unit with compilation errors in first pass.
Compile with -strict or with -logLevel set to TRACE or DEBUG to see all errors.

如果包含-strict标志,那么当它遇到无法正确包含的内容时,编译实际上会失败.

这个工作是在编译的最初阶段完成的,同时在构建任何JS之前很久就构造了用于生成器的TypeOracle.那个类型的oracle被传递给生成器,它们需要能够提出诸如“源路径上的哪些接口具有JSO实现”和“List的所有可能子类”之类的问题.生成器可以执行大量操作,包括发出更多类型,然后需要对其进行解析,编译,并且该过程将持续进行,直到基于当前模块集创建所有可能类型的完整JProgram.

然后根据从根本可以达到的内容 – 入口点以及一些其他细节(例如如何模拟诸如强制转换,数组,长整数,异常等Java细节)来编译JProgram.

如果未指定-strict,并且编译器最终需要达到因早期编译问题而无法访问的内容,那就是您发现的时间.使用-strict提前停止将有助于确保您更快地发现这些问题.

另一个有趣的事实:默认情况下,使用模块中的com.google.gwt.user.User(或依赖于它的任何其他< inherits>),您已经有一个入口点,或几个!这些可以快速检查您的页面是否正常工作,例如使用严格的doctype,或者浏览器实际匹配预期的user.agent设置.这意味着即使没有入口点,通常也可以编译模块(gwt-maven-plugin:compile除外,它不会仅考虑那些内置的模块进行编译).

编辑:好的,甚至还有一个:从http://www.gwtproject.org/doc/latest/DevGuideCompilingAndDebugging.html开始,结合-strict,看起来你可以强制验证运行而不实际编译成JS:

-validateOnly            Validate all source code,but do not compile

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读