在maven构建阶段更新jsp脚本标记

时间:2015-01-09 07:55:07

标签: java jsp maven maven-plugin

我想更新src / main / webapp / jsp下的jsp文件中所有脚本标签内的内容。 如何在maven构建阶段执行此操作?

我正在使用java + spring + maven stack。

好的,这是我想要实现的例子:

源代码:

<%@ page contentType="text/html; charset=utf-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<%@ taglib prefix="s" uri="/struts-tags"  %>
<script type="text/javascript" src="js/core/validator.js"></script>
<script type="text/javascript" src="js/app/util/core-util.js"></script>
<div id="dataContainer">
</div>

在maven构建之后,这应该出现在目标文件夹

<%@ page contentType="text/html; charset=utf-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<%@ taglib prefix="s" uri="/struts-tags"  %>
<script type="text/javascript" src="js/core/validator.js?version='<MD5SUM-of-js/core/validator.js>'"></script>
<script type="text/javascript" src="js/app/util/core-util.js?version='<MD5SUM-of-js/app/util/core-util.js>'"></script>
<div id="dataContainer">
</div>

请注意src =&#34;&#34;。

末尾的版本参数

更新:最后,我能够按照以下方式开展工作。如果有的话,请随意提出替代方案。

  1. 准备shell脚本以生成类似这样的属性文件

    JS /核心/ validator.js = JS /核心/ validator.js?版本\ = MD5SUM-的-JS /型芯/ validator.js
    JS /应用/ util的/芯util.js中= JS /应用程序/ util的/芯util.js中?版本\ = MD5SUM-的-JS /应用/ util的/芯util.js中

  2. 配置maven-replacer-plugin,将此属性文件用作标记值映射,并过滤target / app / jsp文件夹下的所有jsp文件。

3 个答案:

答案 0 :(得分:4)

你没有说出你需要什么样的替代品,但是......

对于很多情况,你可以使用常规的maven资源插件并打开过滤。这样它将用maven运行时属性替换任何${values}

Documentation about the plugin

对于.jsps,您可能已经在使用war插件。使用war插件就像

    <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-war-plugin</artifactId>
        <version>2.2</version>
        <configuration>
            <webResources>
                <resource>
                    <filtering>true</filtering>
                    <targetPath>WEB-INF</targetPath>
                    <directory>src/main/resources/WEB-INF</directory>
                    <includes>
                        <include>*.jsp</include>
                    </includes>
                </resource>
            </webResources>
        </configuration>
    </plugin>

然后你在JSP中有这样的东西:

<script src="${mypath}/test.js"></script>

在maven pom中:

<properties>
   <mypath>testpath</mypath>
</properties>

取决于您的项目配置。 (例如,经常使用src / main / webapp)


编辑:您已在评论中添加了一个计算md5的shell脚本,并且您想要使用它。我不知道这样做的优雅方式,所以建议一种不那么优雅的方式:使用groovy插件来执行脚本并获取属性的值。

<plugin>
    <groupId>org.codehaus.gmaven</groupId>
    <artifactId>gmaven-plugin</artifactId>
    <version>1.5</version>
    <executions>
        <execution>
            <phase>validate</phase>
            <goals>
                <goal>execute</goal>
            </goals>
            <configuration>
                <providerSelection>2.0</providerSelection>
                <properties>
                    <script>path/to/your/shell-script.sh</script>
                </properties>
                <!-- if the script prints its result to stdout -->
                <source>
                    def command = project.properties.script
                    def process = command.execute()
                    process.waitFor()

                    def result = process.in.text.trim()
                    project.properties.md5Value = result
                </source>
                <!-- if the script prints the result to a file -->
                <!-- note that you have to define this result file name somewhere -->
                <source>
                    def command = project.properties.script
                    def process = command.execute()
                    process.waitFor()

                    def resultfile = new File(project.properties.result_file)
                    project.properties.md5Value = resultfile.getText()
                </source>
                <!-- only use one or the other script block! -->
            </configuration>
        </execution>
    </executions>
</plugin>

答案 1 :(得分:1)

如果您想要的唯一内容是向?version=xxx添加校验和,并且不需要使用自定义shell脚本,则可以使用maven-antrun-plugin及其checksum与资源过滤一起使用目标。

JSP片段:

<!-- WEB-INF/jsp/template/thePage.jsp -->
<script type="text/javascript" src="${jsDir}/awesomeScript.js?version=${md5.awesomeScript}"></script>

Antrun插件片段:

<!-- pom.xml -->
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-antrun-plugin</artifactId>
<executions>
  <execution>
    <phase>validate</phase>
    <goals>
      <goal>run</goal>
    </goals>
    <configuration>
      <target>
        <checksum file="${jsDir}/awesomeScript.js" property="md5.awsomeScript"/>
      </target>
      <exportAntProperties>true</exportAntProperties>
    </configuration>
  </execution>
</executions>

最后是资源插件片段:

<!-- pom.xml -->
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-resources-plugin</artifactId>
<executions>
  <execution>
    <goals>
      <goal>copy-resources</goal>
    </goals>
    <phase>generate-sources</phase>
    <configuration>
      <resources>
        <resource>
          <directory>${project.basedir}/war/WEB-INF/jsp/template</directory>
          <targetPath>${project.basedir}/war/WEB-INF/jsp</targetPath>
          <includes>
            <include>*.jsp</include>
          </includes>
          <filtering>true</filtering>
        </resource>
      </resources>
    </configuration>
  </execution>
</executions>

checksum插件的antrun目标应计算校验和并将其公开在${md5.awesomeScript}属性中。

resources插件会在稍后阶段发布,并将.jsp文件夹中的所有WEB-INF/jsp/template文件复制到/jsp根目录,过滤maven属性。

因此,您应该得到一个jsp文件,其中?version=${md5.awesomeScript}使用以前生成的校验和进行增强。

我收录的片段就是片段。您可能需要提供一些进一步的配置才能使代码正常工作。

如果您需要在自定义shell脚本中计算MD5,我建议您扩展脚本,以便为您执行find-replace-copy并使用maven exec插件来运行它。

希望这会有所帮助! : - )

答案 2 :(得分:1)

我能告诉你你最后是怎么做到的吗? 如果没有“?version =''”我能做到吗? 像这样

source:
<script type="text/javascript" src="js/core/validator.js"></script>
after build:
<script type="text/javascript" src="js/core/validator.js?version=xxxx"></script>