gwt可以像maven一样分析依赖吗?

时间:2012-10-17 19:18:49

标签: gwt dependencies inheritance gwt-maven-plugin

如何让GWT提供与 mvn依赖关系:分析相同的依赖性洞察?

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

系统分析依赖状态是否有好方法?

由于

彼得

1 个答案:

答案 0 :(得分:2)

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

已使用的未声明的依赖项

在尝试解决之前,问题是什么?在maven中,此类别意味着从不依赖于依赖的依赖项加载类,而是通过传递加载。这开始涉及传递依赖(存在于GWT中)和范围(不存在)的整个问题。如果A在C中使用一个类,但仅依赖于B,这取决于C,则它将列在“used,undeclared dependencies”列表中。

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

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

未使用的,声明的依赖项

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

考虑到这些,或许这样的工具可以在当前版本中查看所有可能的重新绑定规则,以及所有配置设置,属性等,并查看在com.google.gwt.user.RemoteServiceObfuscateTypeNames进程中是否有任何这些规则未使用。然后,指出哪些模块具有未使用的部件,以及是否有任何模块(及其所有继承的模块)未使用,它可以向用户显示为能够被移除。

一个更重要的部分:在定义gwt:compile语句时,顺序很重要。如果我为<inherits>添加一个继承,然后用com.google.gwt.logging.Logging跟随它,日志类将在源路径上并将进行编译,但不起作用。但如果这些是相反的,那么它们不仅会在源路径上,而且都会起作用。因此,对使用和未使用的模块的任何分析都需要包括传递继承语句及其顺序。

相关问题