我想更新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;。
末尾的版本参数更新:最后,我能够按照以下方式开展工作。如果有的话,请随意提出替代方案。
准备shell脚本以生成类似这样的属性文件
JS /核心/ validator.js = JS /核心/ validator.js?版本\ = MD5SUM-的-JS /型芯/ validator.js
JS /应用/ util的/芯util.js中= JS /应用程序/ util的/芯util.js中?版本\ = MD5SUM-的-JS /应用/ util的/芯util.js中
配置maven-replacer-plugin,将此属性文件用作标记值映射,并过滤target / app / jsp文件夹下的所有jsp文件。
答案 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)
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>