链接器
链接器子系统负责编写 GWT 编译器的输出。它负责每个输出文件的名称、位置和内容。
在编译器内部,每个输出文件都由一个 Artifact 表示。
通常您不需要关心它们,除非您有特殊要求。
链接器创建多种类型的文件(参见 EmittedArtifact.Visibility)
- **公共文件** 是那些打算被 Web 浏览器下载的文件。这包括 JavaScript 和其他资源文件。
- **源文件** 仅在开发期间提供给浏览器。这包括 Java 源代码和浏览器调试器使用的源映射。
- **部署文件** 应用程序服务器可能需要它们,但不能提供给浏览器。
- **私有文件** 包含关于编译过程中发生的事情的各种可选报告。Soyc 报告就是一个例子。
- 还有一些非发射工件,它们用于将数据从一个链接器传递到另一个链接器,但不会作为输出写入。
链接器分为三类
- **预链接器** 在主链接器之前运行,按照其名称的字典顺序。
- **主链接器** 是主要的链接器。每次编译只运行一个主链接器。
- **后链接器** 在主链接器之后运行,按照其名称的逆字典顺序。
要使用 Linker
,只需将 <add-linker name="linker_name" />
添加到您的 Module.gwt.xml
文件中
<module>
<inherits name="com.google.gwt.core.Core" />
<add-linker name="sso" />
</module>
或者您也可以继承另一个模块,该模块为您添加链接器。
此标记对于预链接器和后链接器是累加的;只运行最后一个主链接器。如果未指定,则 xsiframe
链接器为默认链接器。
可用链接器
请参阅每个链接器的文档以检查如何使用它。
定义了以下 主链接器
- xsiframe(类 CrossSiteIframeLinker):此链接器使用一个 iframe 来保存代码,并使用一个脚本标签来下载代码。如果未指定链接器,则为默认链接器。
- direct_install(类 DirectInstallLinker):一个直接将脚本标签添加到 iframe 的链接器。
- sso(类 SingleScriptLinker):一个从 GWT 模块生成单个 JavaScript 文件的链接器。
以下链接器已弃用
- xs:改用
xsiframe
。 - std:改用
xsiframe
。
自定义链接器
如果您有现有链接器无法满足的特定需求,您可以创建和使用自定义链接器。
首先,实现您的链接器。它必须是一个扩展 Linker 抽象类(检查其文档)或 AbstractLinker 的类。
使用 @LinkerOrder
注解,您可以指定它是预链接器、后链接器还是主链接器。您还必须用 @Shardable
注解对其进行注释。
其次,通过将 <define-linker name="short_name" class="fully_qualified_class_name" />
放入您的 Module.gwt.xml
文件中来注册您的链接器。name
属性必须是有效的 Java 标识符,并用于在 <add-linker>
标记中识别链接器。
允许通过声明一个具有相同名称的新 <define-linker>
标记来重新定义已定义的链接器。
然后,您可以像使用任何其他链接器一样使用您的链接器,使用 <add-linker>
。
内部链接器
为了参考,这里还有一些 GWT 使用的其他链接器。它们不是 GWT 公共 API 的一部分,您不应该直接引用它们。
定义了以下 预链接器
- rpcPolicyManifest(类 RpcPolicyManifestLinker):发出一个文件,其中包含一个 RPC 代理类到 RPC 策略文件的相对路径的映射。对于使用 GWT-RPC 的应用程序,它会自动打开。
定义了以下 后链接器
- soycReport(类 SoycReportLinker):将 SOYC 报告文件转换为发出的私有工件。此链接器默认启用,但 SOYC 报告本身默认关闭,并通过
-soyc
编译器标志启用。如果编译器不生成报告,则此链接器不会执行任何操作。 - symbolMaps(类 SymbolMapsLinker):此链接器将与每个编译结果相关的符号映射导出为私有文件。此链接器默认启用。
- rpcLog(类 RpcLogLinker):此链接器发出 RpcLogArtifact` 作为输出文件。对于使用 GWT-RPC 的应用程序,它会自动打开。
- precompress(类 PrecompressLinker):一个预压缩它看到的公共工件的链接器。通过继承
com.google.gwt.precompress.Precompress
来使用它。