尽管很多servlet容器例如tomcat、jetty等为了提升jsp第一次访问的性能,都提供了jsp的预编译功能:

        

maven项目中json如何 maven jsp_maven

                

 

但是对于上线前验证或者持续集成的需求来说,很有必要提供一个能够手动或者命令行对jsp文件进行编译检查的方法,考虑到持续集成的便利性,我们使用maven及其插件解决这一问题。

首先从maven官网下载安装包并解压到本机目录,添加系统环境变量“MAVEN_HOME”指向解压目录,并将“%MAVEN_HOME%/bin”添加到系统%path%环境变量下。

开始通过下面方式创建一个java web项目“mvnarchetype:create -DgroupId=com.testweb -DartifactId=TestWebProject-DarchetypeArtifactId=maven-archetype-webapp”,我最开始在这里折腾了很久,因为我没有明白“maven Archetype”的含义,建了一个” quickstart”类型的项目,然后对maven视src中的jsp文件如无物非常迷惑。Archetype的详细列表参见:https://maven.apache.org/guides/introduction/introduction-to-archetypes.html

在执行这个命令行的时候,你同时可能遇到各种问题,因为maven安装包实际提供你的是一个最小可用的包,而你在实际项目中需要用到大量依赖的插件,这都是需要从其中央仓库在线下载的,因为我没有自己的仓库(可以用nexus搭建自己的中央仓库,而且如果实际项目中要用maven的话也一定要搭建自己的中央仓库),所以光下载这些依赖的插件就用了两天……,当然网络上还有一些公共的仓库地址也可以试试:http://tianya23.blog.51cto.com/1081650/386908

当你下载完所需的插件后,提示项目创建成功,并且在”%USERPROFILE%\.m2”下保存了所下载的maven插件,下次使用直接从本地仓库而非中央仓库获取。而如果要使用其他仓库,则需要修改该目录下的settings.xml。

maven项目中json如何 maven jsp_maven_02

接下来重要的事情就是进入创建的maven项目下,修改下面的的pom.xml,加入对jspc插件使用,在build节点下,finalName节点后加入如下节点信息:

<plugins>
                            <!-- begin - precompiling jsps -->
                            <plugin>
                                     <groupId>org.codehaus.mojo</groupId>
                                     <artifactId>jspc-maven-plugin</artifactId>
               <version>1.4.6</version>
                                     <executions>
                                               <execution>
                                                        <id>jspc</id>
                                                        <goals>
                                                                 <goal>compile</goal>
                                                        </goals>
                                               </execution>
                                     </executions>
                            </plugin>
                            <plugin>
                                     <groupId>org.apache.maven.plugins</groupId>
                                     <artifactId>maven-war-plugin</artifactId>
               <version>2.4</version>
                                     <configuration>
                                               <webXml>${basedir}/target/jspweb.xml</webXml>
                                     </configuration>
                            </plugin>
                            <!-- end -precompiling jsps -->
</plugins>

         这里详细参见:http://www.avajava.com/tutorials/lessons/how-do-i-precompile-my-jsps.html?page=1,但是有一个注意的地方是,每个插件节点下,都需要添加<version>的节点描述信息,否则在后面运行时会出现如下警告信息。

maven项目中json如何 maven jsp_maven项目中json如何_03

         上面这篇文章中还加入了其他节点信息用于生成web.xml中的信息:

<!-- begin - deploying/undeploying toTomcat -->
                            <plugin>
                                     <groupId>org.codehaus.mojo</groupId>
                                     <artifactId>tomcat-maven-plugin</artifactId>
               <version>1.1</version>
                                     <configuration>
                                               <url>http://192.168.1.7:8080/manager</url>
                                               <server>mytomcat</server>
                                               <path>/mywebapp</path>
                                     </configuration>
                            </plugin>
                            <!--end - deploying/undeploying to Tomcat -->
                            <!--begin - compiling project to a particular version of java -->
                            <plugin>
                                     <groupId>org.apache.maven.plugins</groupId>
                                     <artifactId>maven-compiler-plugin</artifactId>
               <version>2.3.2</version>
                                     <configuration>
                                               <source>1.6</source>
                                               <target>1.6</target>
                                     </configuration>
                            </plugin>
                            <!--end - compiling project to a particular version of java -->
                            <!--begin - setting classpath to use an Eclipse user library for Tomcat (foreclipse:eclipse) -->
                            <plugin>
                                     <groupId>org.apache.maven.plugins</groupId>
                                     <artifactId>maven-eclipse-plugin</artifactId>
               <version>2.9</version>
                                     <inherited>true</inherited>
                                     <configuration>
                                               <classpathContainers>
                                                        <classpathContainer>org.eclipse.jdt.launching.JRE_CONTAINER</classpathContainer>
                                                        <classpathContainer>org.eclipse.jdt.USER_LIBRARY/TOMCAT_6.0.14_LIBRARY</classpathContainer>
                                               </classpathContainers>
                                     </configuration>
                            </plugin>
                            <!--end - setting classpath to use an Eclipse user library for Tomcat (foreclipse:eclipse) -->

         修改完pom.xml之后,将需要检查的jsp文件放到mvn项目的”\src\main\webapp\文件夹下,用“mvn test”或者”mvn package”命令行即可检查出jsp是否存在错误。

         maven项目的目录结构可以参考:

         执行上述命令行的时候实际上还有点疑问是在使用”mvn compile“命令行时并没有对jsp文件进行编译,而从maven的生命周期阶段示意以及pom.xml中goal的设定来看,应该是可行的……

         如此项目中的jsp文件错误信息如下:

maven项目中json如何 maven jsp_xml_04

           通过该实践,maven体现出了淋漓尽致的”约定优于配置“的开发原则,没有纷繁复杂的配置项,有的则是对于其配置的遵守以及遵守之后的便利。