【问题标题】:Build HTML page during maven build在 Maven 构建期间构建 HTML 页面
【发布时间】:2012-06-05 01:33:30
【问题描述】:

我正在使用 Maven 构建一个 HTML webapp。我有一个用于调试的配置文件和另一个用于发布的配置文件。在调试配置文件中,我希望在 HTML 页面中使用未压缩的 Javascript,但在发布配置文件中,我连接所有 Javascript 文件,然后使用 Googles Closure 编译器对其进行压缩。

所以基本上我有 2 个 Javascript 文件列表,我需要根据选择的配置文件将它们作为 <script> 标记写到 HTML 页面中。

是否有一个 Maven 插件,我可以为不同的配置文件配置不同的列表,可以根据需要生成 HTML 文件?

【问题讨论】:

    标签: maven


    【解决方案1】:

    基于通过Google i found a Maven Plugin 进行的简短搜索,可用于进行压缩。因此,基于此,正如您已经提到的那样,拥有不同的配置文件来压缩或不压缩或不压缩文件就没有问题。

    【讨论】:

    • 问题不在于压缩,而是在 HTML 文件中创建了正确的 <script> 标记。在调试案例中,我有几个需要单独的 <script> 标签的 js 文件(script1.js、script2.js、script3.js)。在发布案例中,我将所有文件连接到site-scripts.js,这是所有文件的压缩版本,因此我只需要一个<script> 标签。我最终编写了一个 Maven 插件来为我做这件事。
    【解决方案2】:

    经过大量调查,我确定最好的选择是编写自己的 maven 插件。我有一个简单的 .html 模板,其中包含有关将 CSS 和 JS 标记插入 HTML 的位置的指令:

    <!doctype html>
    <html lang="en">
    <head>
      <meta charset="utf-8">
      <title>Fifa Social - Hello World</title>
      <meta name="description" content="Hello World app for Fifa Social">
    
      <meta name="viewport" content="width=device-width">
    
      $cssIncludes$
      $jsIncludes$
    
    </head>
    <body>
        <p>Page content</p>
    </body>
    </html>
    

    然后我有一个 Maven 插件,它在 Maven 生命周期的“生成源”阶段运行,它采用模板并将 $cssIncludes$$jsIncludes$ 替换为 &lt;script&gt;&lt;link&gt; 标记的适当列表. (注意:我使用 antlr stringtemplate Java 库作为插件的依赖项)。

    我不能发布实际的插件,因为它是一个专有项目,但它是从 AbstractMojo 扩展的单个 Java 类

    • 它有@parameter 属性可以从POM 中读取&lt;configuratioon&gt;
      • html 模板的位置
      • 输出文件的位置
      • JS文件列表
      • CSS 文件列表
    • 在执行期间
      • 从文件中读取 html 模板并将其存储为字符串
      • 从 html 模板创建一个org.antlr.stringtemplate.StringTemplate
      • 使用默认的org.antlr.stringtemplate.language.DefaultTemplateLexer
      • 循环遍历配置中的 JS 和 CS 文件,创建 &lt;script&gt;&lt;link&gt; 标记作为字符串
      • 使用template.setAttribute将构建的字符串绑定到$cssIncludes$和$jsIncludes$
      • 将模板写入文件系统

    效果很好。我只是根据当前的 Maven 配置文件向插件发送不同的 JS 和 CSS 文件列表。

    【讨论】:

      【解决方案3】:

      如果 maven 资源插件(使用来自 properties filesfiltering)还不够,也许您可​​以使用 freemaker 或 velocity maven plugins 之一来生成您的页面。

      我使用velocity插件生成一个HTML页面来测试我的JS代码和maven jasmine插件,以及另一个用于生产的HTML页面。代码将很快发布。如果你需要它请ping,所以我会记得添加链接。

      【讨论】:

        猜你喜欢
        • 2015-09-17
        • 2012-04-21
        • 2018-09-20
        • 2014-01-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-09-20
        • 2017-08-31
        相关资源
        最近更新 更多