当前位置: 代码迷 >> Web前端 >> Maven3实战札记12Maven构建Web应用
  详细解决方案

Maven3实战札记12Maven构建Web应用

热度:169   发布时间:2012-10-29 10:03:53.0
Maven3实战笔记12Maven构建Web应用

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文件中需要指定打包类型为warpom.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服务器实现JSPServletJSF规范是不一样的,Tomcat自己的实现与Jetty就有很大差异,没准一个JSF项目在Tomcat下面运行得好好的,放到了Jetty下面就出现了不可预知的异常。所以还是是用IDE集成的Web服务器查看问题更方便一些。当然此处仅仅是笔者经验的一家之言,不同项目因情况而异。

Web项目中依赖SpringStruts等等第三方的包,和JavaSE的依赖配置一样。此处不必详说。而因为笔者调试阶段是使用IDE工具集成的Web服务器――Tomcat,所以不必在pom.xml中显示声明JSP-implServlet-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

此处就不细细道来了。

1 楼 melin 2011-06-14  
maven多模块开发遇到一个比较大的问题。ts.ires.web是一个war工程,其它工程是jar工程。jar只要修改工程,就要mvn deploy。 非常麻烦,不知道你有什么好的办法。

/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>
2 楼 suhuanzheng7784877 2011-06-14  
哥们儿,你看这样行不行,使用Hudson进行持续集成,你在Hudson配置你的web应用,让Huson定时去SVN库check代码,若发现SVN库源代码source code有变更,会自动下载,编译的。让你的web项目依赖于其他的Maven的jar项目,它会先编译依赖项目,依赖构建完成后再chack主web项目


http://www.docin.com/p-219804521.html

是关于hudson的介绍,持续集成。