SpringSource Tool Suite 中的自定义项目模板

工程 | Martin Lippert | 2011 年 2 月 24 日 | ...

SpringSource Tool Suite (STS) 提供了“新建 Spring 模板项目”向导。用户可以使用此向导查看多个项目模板,选择一个,然后让向导根据该模板描述创建一个完整的项目。虽然这提供了一种创建新项目的便捷方式,但您可能希望为您的团队或组织定义自己的自定义项目模板。接下来我们将演示如何做到这一点。

1. 步骤:向 STS 贡献新的资源扩展

STS 通过下载和读取资源 XML 文件来创建可用项目模板的列表。要让 STS 知道这些资源文件的位置,您需要通过扩展将其贡献给 STS。

因此,第一步是创建一个新的空插件项目。您不需要 Java 代码,所以不要将其创建为 Java 项目。只需创建一个新的插件项目,在向导中取消选择 Java 选项即可。

现在在该插件项目中定义扩展。通过在打开清单编辑器时(双击 META-INF/MANIFEST.MF)选择“扩展”选项卡来创建一个 plugin.xml。您可以通过修改 plugin.xml 来定义扩展,使其看起来像这样:


<?xml version="1.0" encoding="UTF-8"?>
<?eclipse version="3.4"?>

<plugin>
   <extension point="com.springsource.sts.core.resources">
      <url
         id="content.descriptors"
         value="%content.descriptor.urls">
      </url>
   </extension>

</plugin>

这定义了对 STS 扩展点 com.springsource.sts.core.resources 的贡献,并使用您的新值覆盖 content.descriptors ID 的默认值。这个新值应包含您希望在 STS 向导中看到的所有模板的所有 URL。在这种情况下,我们不会直接在此处放置 URL,而是将其外部化到一个单独的属性文件中。*这是必需的*,用于多个 URL,您将看到。

下一步是创建一个名为 bundle.properties 的属性文件,将其放在插件的 OSGI-INF/I10n/ 目录中。此属性文件应如下所示:


content.descriptor.urls = http://dist.springsource.com/release...riptors.xml\n\
file:///Users/mlippert/template-contribution/descriptor.xml

正如您所见,我在这里放置了原始 STS 值,以保留 STS 的默认模板,并添加了我自己的(在此情况下是本地的)descriptor.xml 文件的 URL。因此,如果您只想使用本地文件,可以继续采用这种方法。如果您想将新模板分发给整个公司,让 descriptor.xml 文件作为 HTTP 资源提供将很有意义。请注意,URL 由 \n 分隔。

现在,您已经完成了 STS 新插件的大部分工作。您可以导出该插件,然后将生成的 JAR 文件放入 STS 安装的 dropins 目录中。请注意,build.properties 已勾选 META-INF、OSGI-INF 和 plugin.xml 以包含在二进制构建中。

(我附上了此示例的插件项目:template-contribution-plugin.zip

2. 步骤:构建 descriptor.xml 文件

您在上一步中添加到 STS 扩展的 URL 指向一个 descriptor.xml 文件。该文件应如下所示:

<?xml version="1.0" encoding="UTF-8" standalone="no"?>

<descriptors>
   <descriptor id="org.test.mynewtemplate" kind="template" local="false" name="Mein neues Template" size="998877" url="file:///Users/mlippert/template-contribution/test-template-1.0.0.zip" version="1.0.0">
      <description>My brand new template contribution for this hacky stuff etc.</description>
   </descriptor>
</descriptors>

正如您所见,我在此处放置了一些随机的无意义示例,您应该将其替换为您自己的 ID。请选择:

  • 为您自己的模板 ID(示例中为 org.test.mynewtemplate
  • 为您自己的模板名称(“Mein neues Template”),这将显示在向导列表中
  • 您自己的 URL,指向模板的 ZIP 文件
  • 不要忘记在 side 属性中设置 ZIP 文件的正确大小
  • description:更多文本,告知用户您的模板是关于什么的

3. 步骤:构建实际的模板

现在您需要创建我们在 descriptor.xml 文件中引用的 ZIP 文件。此 ZIP 文件应在其根目录中包含三个文件:
  • template.xml
  • template.zip
  • wizard.json

让我们来看第一个,template.xml


<template>
   <descriptor id="org.test.mynewtemplate"
             name="Mein neues Template"
             kind="template"
             version="1.0.0">
      <description>My brand new template contribution for this hacky stuff</description>
   </descriptor>
   <project path="template.zip"/>
   <json path="wizard.json"/>
</template>

它包含与 descriptor.xml 相同的模板 idnamedescription,以及相同的 versiontemplate 类型。此外,它还包含对 template.zip 文件和 wizard.json 文件的引用。因此,这是您定义这两个其他文件的地方。

wizard.json 文件包含用于创建和处理此特定模板的向导 UI 的描述。在我的示例中,wizard.json 文件如下所示:


{
   "info" : {
      "elements" : {
         "element" : [
         {
            "name" : "topLevelPackage",
            "description" : "Please specify the top-level package e.g. com.mycompany.myapp",
            "type" : "java.lang.String",
            "page" : 0,
            "required" : true,
            "pattern" : "\\w+\\.\\w+(\\.\\w+)+",
            "replaceKind" : "topLevelPackage"
         }
         ]
      },

      "topLevelPackage" : "mytld.mycompany.myapp.mysubsystem",
      "projectName" : "projectName",

      "pages" : {
         "page" : [
         {
            "order" : 0,
            "description" : "Project Settings"
         }
         ]
      }
   }
}

我在这里不深入细节,但这基本上是向导 UI 的信息。它包含用户可以在向导中输入的元素,这些元素用于创建实际项目(例如,顶层包)。

最后一部分是用户选择您的模板时希望实例化的实际项目。您所要做的就是自己创建项目,并按照 wizard.json 中定义的名称来命名顶层包(在本例中为 mytld.mycompany.myapp.mysubsystem)。在我附加的示例中,模板项目位于名为 template 的根目录中,包含:

  • .classpath
  • .project
  • .settings
  • .springBeans
  • pom.xml
  • 包含项目布局和一些预定义源代码的 src 目录
这里有一个示例:template-contribution.zip

就这样!

请注意:一旦您将新模板的 zip 文件下载到 STS(这是在您从列表中选择并按 Enter 键后自动完成的),STS 将在下次重用下载的文件。因此,如果您更改模板,请务必为其设置一个新版本号。否则,STS 将不会采用您更改后的模板。

获取 Spring 新闻通讯

通过 Spring 新闻通讯保持联系

订阅

领先一步

VMware 提供培训和认证,助您加速进步。

了解更多

获得支持

Tanzu Spring 提供 OpenJDK™、Spring 和 Apache Tomcat® 的支持和二进制文件,只需一份简单的订阅。

了解更多

即将举行的活动

查看 Spring 社区所有即将举行的活动。

查看所有