1.? 构建Web应用介绍
Java Web项目是我们最熟悉的项目类型了,一个Web项目的结构大家也是烂熟于心。之前咱们使用Maven构建的都是JavaSE类型的项目,虽然说Java Web项目可以借助类似于Eclipse这种IDE可以很好的帮助我们打包生成war,而且IDE可以集成Web服务器,联调也不麻烦。那如果说我在构建Web项目的同时又想跑一下全部的单元测试用例呢,又比如我的Web项目引用了很多已有的Maven私服上的jar包呢(比如就是Struts+Spring+Hibernate),再比如,我想看看此次Web项目构建过程中具体的报告信息等等,还是用Maven管理Java Web项目更为科学吧~当然了,笔者在这里绝不是让大家将所有的项目都迁移到Maven模式管理下,绝无此意,而是觉得在JavaSE上能体现Maven的优点同样适用于Java Web项目,虽然这种迁移会让您稍微改变一下以往的开发模式,但是个人认为从长期角度讲,对项目,对企业,对客户还是值得的。
2.? 使用Maven构建Java Web项目
Java Web项目和别的项目不一样的地方主要在于2点,第一就是pom.xml文件中的构件类型,第二就是web资源(包括页面、web.xml、图片资源文件)。
在pom.xml文件中需要指定打包类型为war。pom.xml文件内容如下
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>MavenAccount-web</groupId> <artifactId>MavenAccount-web</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>war</packaging> <name>MavenAccount-web</name> <url>http://maven.apache.org</url> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> </properties> <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>3.8.1</version> <scope>test</scope> </dependency> </dependencies> </project>
?之后就是放置web文件的位置,Maven约定web文件放到src/main/webapp下面,用过MyEclipse的朋友们可能知道,开发web项目根目录下除了有src目录,都有一个叫做WebRoot的目录用于存储web资源的。
?webapp下面就是那个放置页面资源的文件夹。
下面就是src/main/java下一个简单的JavaBean的代码。
package MavenAccountweb; /** * Hello world! */ public class App { public String sayWebHello(String str) { System.out.println(str); return "hello:" + str; } }
?主页面入口index.jsp内容如下
<%@ page language="java" import="MavenAccountweb.App" pageEncoding="utf-8"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>Hello Web</title> <!-- <link rel="stylesheet" type="text/css" href="styles.css"> --> </head> <body> <% App app = new App(); String newString = app.sayWebHello("liuyan"); %> [<%=newString%>] <br> </body> </html>
?它引用了业务JavaBean输出一段内容。
在项目根目录下运行maven脚本
mvn clean package
?之后看到目标输出目录出现如下内容
?其中MavenAccount-web-0.0.1-SNAPSHOT.war,我们将其部署到本机的tomcat上运行。看到页面效果如下
?
Ok,证明你的Java Web项目构建成功。因为Java Web具体技术研发不在本次讨论的重点范围内,因此仅仅给出一个十分微小的Web项目。需要注意的是大家平时调试的时候完全可以使用IDE集成Web应用服务器,这是没有问题的,笔者看有些地方介绍了Maven插件――jetty-maven-plugin进行嵌入式的web调试,其实笔者认为大可不必,有IDE的时候其实使用此Maven插件感觉并不比使用IDE集成的Web服务器方便多少,而且各种Web服务器实现JSP、Servlet、JSF规范是不一样的,Tomcat自己的实现与Jetty就有很大差异,没准一个JSF项目在Tomcat下面运行得好好的,放到了Jetty下面就出现了不可预知的异常。所以还是是用IDE集成的Web服务器查看问题更方便一些。当然此处仅仅是笔者经验的一家之言,不同项目因情况而异。
在Web项目中依赖Spring、Struts等等第三方的包,和JavaSE的依赖配置一样。此处不必详说。而因为笔者调试阶段是使用IDE工具集成的Web服务器――Tomcat,所以不必在pom.xml中显示声明JSP-impl、Servlet-impl等等Java Web规范的依赖项,Tomcat自身就是一个Java Web容器,自己有相关jar实现了此规范。(至于JavaEE规范详细请查看笔者Blog: http://suhuanzheng7784877.iteye.com/blog/908380)
3.? 总结
Web项目是我们搞Java研发人员中接触最多的,使用Maven配合MyEclipse这种IDE能让Web项目构建、升级第三方包、依赖第三方包更加简单、方便。也节省了很多查找Web依赖的时间。尤其是SSH项目,有时使用Spring需要依赖其他很多jar包,Maven会为您管理、下载这种间接依赖的。从此我们的Web开发显得构建简单了。当然可以参考其他文章看看使用Maven插件进行web项目热部署
http://www.huomo.cn/developer/article-196fd.html
http://article.yeeyan.org/view/jdonee/19631?from_com
此处就不细细道来了。
/ts.ires.admin
/ts.ires.application
/ts.ires.collection
/ts.ires.core
/ts.ires.metadata
/ts.ires.monitor
/ts.ires.service
/ts.ires.share
/ts.ires.web
ts.ires.web工程的pom.xml
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>com.starit.resource</groupId> <artifactId>resource-parent</artifactId> <version>1.0.0-SNAPSHOT</version> </parent> <packaging>war</packaging> <artifactId>ts.ires.web</artifactId> <name>starit resource web</name> <dependencies> <dependency> <groupId>com.starit.resource</groupId> <artifactId>ts.ires.core</artifactId> <version>${parent.version}</version> </dependency> <dependency> <groupId>com.starit.resource</groupId> <artifactId>ts.ires.admin</artifactId> <version>${parent.version}</version> </dependency> <dependency> <groupId>com.starit.resource</groupId> <artifactId>ts.ires.application</artifactId> <version>${parent.version}</version> </dependency> <dependency> <groupId>com.starit.resource</groupId> <artifactId>ts.ires.collection</artifactId> <version>${parent.version}</version> </dependency> <dependency> <groupId>com.starit.resource</groupId> <artifactId>ts.ires.metadata</artifactId> <version>${parent.version}</version> </dependency> <dependency> <groupId>com.starit.resource</groupId> <artifactId>ts.ires.monitor</artifactId> <version>${parent.version}</version> </dependency> <dependency> <groupId>com.starit.resource</groupId> <artifactId>ts.ires.service</artifactId> <version>${parent.version}</version> </dependency> <dependency> <groupId>com.starit.resource</groupId> <artifactId>ts.ires.share</artifactId> <version>${parent.version}</version> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>tomcat-maven-plugin</artifactId> <configuration> <server>myserver</server> <path>/resource</path> </configuration> </plugin> <plugin> <groupId>org.mortbay.jetty</groupId> <artifactId>jetty-maven-plugin</artifactId> <version>7.2.2.v20101205</version> <configuration> <webAppConfig> <contextPath>/resource</contextPath> </webAppConfig> <!--<scanIntervalSeconds>3</scanIntervalSeconds>--> <connectors> <connector implementation="org.eclipse.jetty.server.nio.SelectChannelConnector"> <port>8080</port> <maxIdleTime>30000</maxIdleTime> </connector> </connectors> <webAppSourceDirectory>src/main/webapp</webAppSourceDirectory> </configuration> </plugin> </plugins> </build> </project>
http://www.docin.com/p-219804521.html
是关于hudson的介绍,持续集成。