1

如何让 GWT 提供与 mvn dependency:analyze相同的依赖洞察?

Maven 可以报告依赖项(使用的未声明的依赖项和未使用的已声明的依赖项)。我想让 GWT 做同样的事情,因为 在我的 gwt.xml 中确定丢失的继承证明是困难的。

系统有没有分析依赖状态的好方法?

谢谢

彼得

4

1 回答 1

2

我不知道有任何这样的工具,虽然我认为分析和报告 GWT 依赖关系的实用程序可能很有趣,但我也认为很难定义好。

使用的、未声明的依赖项

在尝试解决这个问题之前,问题是什么?在 maven 中,这个类别意味着一个类是从一个不直接依赖的依赖项加载的,而是传递加载的。这开始涉及传递依赖(存在于 GWT 中)和作用域(不存在)的整个问题。如果 A 在 C 中使用了一个类,但只依赖于 B,而 B 又依赖于 C,这将列在“已使用的、未声明的依赖项”列表中。

然而,在 GWT 中,我们很少列出我们直接使用的每一个依赖项。com.google.gwt.user.RemoteService相反,我们假设传递依赖将保持传递 -只要我们已经com.google.gwt.user.User列出,我们就不会费心为 RPC 继承。

那么我们如何判断我们是否使用了未声明的依赖项,即当我们执行 a 时会发出警告的那种gwt:compile?也许这样的工具可以找到.gwt.xml类路径上的每个文件,并通读其<source><super-source>规则以查找我们正在使用的类被声明的地方?或者在调用GWT.create某些东西并返回非具体类型的情况下,它可以查找<replace-with><generate-with>规则。只要您的代码已经在 J​​ava 中编译,类就在类路径中,但您仍然会冒着风险,即当类存在时,.java.gwt.xml文件可能不存在。

未使用的、已声明的依赖项

这似乎是一个更简单的问题 - 分析我们正在继承的模块,并查看它们是否有任何可以删减的模块。不幸的是,正如上面的讨论所指出的,我们不能只寻找类和它们在哪个包中,哪些<source><super-source>元素未使用——我们还需要寻找<replace-with><generate-with>规则——考虑类似的东西com.google.gwt.user.RemoteService,它只添加一个规则和一些配置细节,甚至com.google.gwt.user.RemoteServiceObfuscateTypeNames,它只修改了 RemoteService 模块的单个设置。如果 RemoteServiceObfuscateTypeNames 被删除,一切仍然可以编译,但现在可能会有关于编译到应用程序中的 RPC 类的信息,而这些信息是您不希望出现的。

考虑到这些,也许这样的工具可以观察当前构建中所有可能的重新绑定规则,以及所有配置设置、属性等,并查看这些规则中是否有任何规则在gwt:compile进程中未使用。然后,指出哪些模块有未使用的部分,如果有任何模块(及其所有继承的模块)未使用,则可以向用户显示它可以被删除。

更重要的一点是:在定义<inherits>语句时,顺序很重要。如果我添加一个继承com.google.gwt.logging.Logging,然后跟随它com.google.gwt.logging.LoggingDisabled,日志记录类将在源路径上并编译,但没有效果。但是,如果它们以相反的方式排序,那么它们不仅会在源路径上,而且都会正常工作。因此,对使用和未使用的模块的任何分析都需要包括传递继承语句及其顺序。

于 2012-10-17T21:15:24.767 回答