以下是myeclipse中自动创建的web工程,勾选过maven支持后,自动生成的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/maven-v4_0_0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>mavenwebproject</groupId> <artifactId>mavenwebproject</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>war</packaging> <name/> <description/> <dependencies> <dependency> <groupId>org.apache.openejb</groupId> <artifactId>javaee-api</artifactId> <version>5.0-1</version> <scope>provided</scope> </dependency> <dependency> <groupId>javax.faces</groupId> <artifactId>jsf-api</artifactId> <version>1.2_04</version> <scope>provided</scope> </dependency> <dependency> <groupId>javax.servlet</groupId> <artifactId>jstl</artifactId> <version>1.2</version> <scope>provided</scope> </dependency> <dependency> <groupId>javax.servlet.jsp</groupId> <artifactId>jsp-api</artifactId> <version>2.1</version> <scope>provided</scope> </dependency> <dependency> <groupId>javax.faces</groupId> <artifactId>jsf-impl</artifactId> <version>1.2_04</version> <scope>provided</scope> </dependency> </dependencies> <build> <sourceDirectory>${basedir}/src</sourceDirectory> <outputDirectory>${basedir}/WebRoot/WEB-INF/classes</outputDirectory> <resources> <resource> <directory>${basedir}/src</directory> <excludes> <exclude>**/*.java</exclude> </excludes> </resource> </resources> <plugins> <plugin> <artifactId>maven-war-plugin</artifactId> <configuration> <webappDirectory>${basedir}/WebRoot</webappDirectory> <warSourceDirectory>${basedir}/WebRoot</warSourceDirectory> </configuration> </plugin> <plugin> <artifactId>maven-compiler-plugin</artifactId> <configuration> <source>1.5</source> <target>1.5</target> </configuration> </plugin> </plugins> </build> </project>
分段说明下:
<modelVersion>4.0.0</modelVersion>
<groupId>mavenwebproject</groupId>
<artifactId>mavenwebproject</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>war</packaging>
GAV打包类型,没什么说的
<dependencies> <dependency> <groupId>org.apache.openejb</groupId> <artifactId>javaee-api</artifactId> <version>5.0-1</version> <scope>provided</scope> </dependency> <dependency> <groupId>javax.faces</groupId> <artifactId>jsf-api</artifactId> <version>1.2_04</version> <scope>provided</scope> </dependency> <dependency> <groupId>javax.servlet</groupId> <artifactId>jstl</artifactId> <version>1.2</version> <scope>provided</scope> </dependency> <dependency> <groupId>javax.servlet.jsp</groupId> <artifactId>jsp-api</artifactId> <version>2.1</version> <scope>provided</scope> </dependency> <dependency> <groupId>javax.faces</groupId> <artifactId>jsf-impl</artifactId> <version>1.2_04</version> <scope>provided</scope> </dependency> </dependencies>
war包需要的常用依赖,注意其<scope>provided</scope>配置:
写道
在POM 4中,<dependency>中还引入了<scope>,它主要管理依赖的部署。目前<scope>可以使用5个值:
* compile,缺省值,适用于所有阶段,会随着项目一起发布。
* provided,类似compile,期望JDK、容器或使用者会提供这个依赖。如servlet.jar。
* runtime,只在运行时使用,如JDBC驱动,适用运行和测试阶段。
* test,只在测试时使用,用于编译和运行测试代码。不会随项目发布。
* system,类似provided,需要显式提供包含依赖的jar,Maven不会在Repository中查找它。
* compile,缺省值,适用于所有阶段,会随着项目一起发布。
* provided,类似compile,期望JDK、容器或使用者会提供这个依赖。如servlet.jar。
* runtime,只在运行时使用,如JDBC驱动,适用运行和测试阶段。
* test,只在测试时使用,用于编译和运行测试代码。不会随项目发布。
* system,类似provided,需要显式提供包含依赖的jar,Maven不会在Repository中查找它。
打包是不会打进war包里去的。
<sourceDirectory>${basedir}/src</sourceDirectory> <outputDirectory>${basedir}/WebRoot/WEB-INF/classes</outputDirectory>
下边摘自mvn官方说明文档:
写道
如果你想要自定义源码的位置,你也可以更改构建配置。如果你想要存储项目的源码
至src/java而非src/main/java,让构建输出至classes而非target/classes,你可以覆盖
定义在超级POM中的sourceDirectory的默认值。
至src/java而非src/main/java,让构建输出至classes而非target/classes,你可以覆盖
定义在超级POM中的sourceDirectory的默认值。
<build>
...
<sourceDirectory>src/java</sourceDirectory>
<outputDirectory>classes</outputDirectory>
...
</build>
...
<sourceDirectory>src/java</sourceDirectory>
<outputDirectory>classes</outputDirectory>
...
</build>
然后是resource:
<resources> <resource> <directory>${basedir}/src</directory> <excludes> <exclude>**/*.java</exclude> </excludes> </resource> </resources>
同样来自官方文档的例子:
写道
资源目录并非一定要在src/main/resources。这只是定义在
超级POM中的默认值。你应该也注意到你不需要将你所有的资源合并到一个单独的目录
中。你可以将资源分离至src/main目录下的独立的目录中。假设你有个项目包含了数百
个XML文档和数百个图片。你可能希望创建两个目录src/main/xml和src/main/images来
存储这些内容,而不是将它们混合在src/main/resources目录中。为了添加资源目录列
表,你需要在你的构建配置中加入如下的resource元素:
例 10.7. 配置额外的资源目录
<build>
...
<resources>
<resource>
<directory>src/main/resources</directory>
</resource>
<resource>
<directory>src/main/xml</directory>
</resource>
<resource>
<directory>src/main/images</directory>
</resource>
</resources>
...
</build>
超级POM中的默认值。你应该也注意到你不需要将你所有的资源合并到一个单独的目录
中。你可以将资源分离至src/main目录下的独立的目录中。假设你有个项目包含了数百
个XML文档和数百个图片。你可能希望创建两个目录src/main/xml和src/main/images来
存储这些内容,而不是将它们混合在src/main/resources目录中。为了添加资源目录列
表,你需要在你的构建配置中加入如下的resource元素:
例 10.7. 配置额外的资源目录
<build>
...
<resources>
<resource>
<directory>src/main/resources</directory>
</resource>
<resource>
<directory>src/main/xml</directory>
</resource>
<resource>
<directory>src/main/images</directory>
</resource>
</resources>
...
</build>
然后是最后一块:
<plugins> <plugin> <artifactId>maven-war-plugin</artifactId> <configuration> <webappDirectory>${basedir}/WebRoot</webappDirectory> <warSourceDirectory>${basedir}/WebRoot</warSourceDirectory> </configuration> </plugin> <plugin> <artifactId>maven-compiler-plugin</artifactId> <configuration> <source>1.5</source> <target>1.5</target> </configuration> </plugin> </plugins>
第二个插件配置就不说了,之前有介绍,说下第一个。
写道
Maven使用maven-war-plugin插件对Web工程制作war文件。由于本文使用了定制目录结构,这样则会使maven-war- plugin无法找到Web工程的Web Root目录(默认是src/main/webapp),所以需要对该插件进行适当地配置。<warSourceDirectory>就是 Web工程的Web Root目录,此处设置为;<webappDirectory>是制作war文件之前,相当于是一个被打开(exploded)的war文件 的根目录(默认是target/artifactId-version)。