maven作为一个高度自动化构建工具,本身提供了快速构建项目的功能,下面就来体验一下使用maven构建项目的过程。

创建Jave项目

使用如下命令创建Java项目:

$ mvn archetype:generate -DgroupId=com.mycompany.app -DartifactId=demo -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false

指令成功执行之后,maven会在当前目录下创建artifactId同名的(此处是demo)目录,并生成一个maven的Java项目。

构建完成后的目录结构如下:

demo
    └─src
        ├─main
        │  └─java
        │      └─com
        │          └─mycompany
        │              └─app
        └─test
            └─java
                └─com
                    └─mycompany
                        └─app

可以看到,maven创建的项目是一个标准的maven项目,不过目前maven只创建了src/main/java(存放项目的源代码)和src/test/java(存放测试源代码)两个目录,但实际项目开发中一般都会有配置文件(还有不用配置的吗?)所以我们还需要手动创建src/main/resources(存放项目开发中用到的配置文件,如log4j.properties)和src/test/resources(存放测试时用到的配置文件)

Linux:

$ mkdir -p src/main/resources
$ mkdir -p src/test/resources

windows

$ mkdir src\main\resources
$ mkdir src\test\resources

生成的maven POM文件节点说明:

<project\>					pom文件的顶级节点

<modelVersion\>				object model版本,对maven2和maven3来说,只能是4.0.0

<groupId\>					项目创建组织的标识符,一般是域名的倒写

<artifactId\>				定义了项目在所属组织的标识符下的唯一标识,一个组织下可以有多个项目

<version\>					当前项目的版本,SNAPSHOT,表示是快照版本,在开发中

<packaging\>				打包的方式,有jar、war、ear等

<name\>						项目的名称

<url\>						项目的地址

<properties\>				属性配置,比如:<project.build.sourceEncoding\>UTF-8</project.build.sourceEncoding>

<dependencies\>				构建项目依赖的jar

由groupId、artifactId和version唯一的确定了一个项目坐标

创建Jave Web项目

使用如下命令创建Java Web项目

$ mvn archetype:generate -DgroupId=com.mycompany.app -DartifactId=demo-webapp -DarchetypeArtifactId=maven-archetype-webapp -DinteractiveMode=false

生成如下目录:

demo-webapp
    └─src
        └─main
            ├─resources
            └─webapp
                └─WEB-INF

创建好的JavaWeb项目中目前只有src/main/resources目录,因此还需要手动添加src/main/java、src/test/java、src/test/resources

Linux:

$ mkdir -p src/main/java
$ mkdir -p src/test/java
$ mkdir -p src/test/resources

windows

$ mkdir src\main\java
$ mkdir src\test\java
$ mkdir src\test\resources

打包发布Java Web项目

进入生成的项目目录,执行如下打包指令:

$ mvn clean package

指令执行成功,目录结构如下:

demo-webapp
	├─src
	│  ├─main
	│  │  ├─java
	│  │  ├─resources
	│  │  └─webapp
	│  │      └─WEB-INF
	│  └─test
	│      ├─java
	│      └─resources
	└─target
	    ├─classes
	    ├─demo-webapp
	    │  ├─META-INF
	    │  └─WEB-INF
	    │      └─classes
	    ├─maven-archiver
	    ├─maven-status
	    │  └─maven-compiler-plugin
	    │      ├─compile
	    │      │  └─default-compile
	    │      └─testCompile
	    │          └─default-testCompile
	    └─test-classes

target 目录下的demo-webapp.war可以直接部署。

使用jetty插件

除了使用Tomcat服务器运行Web项目之外,我们还可以在Web项目中集成Jetty发布运行.

step 1

首先在pom.xml文件中配置Jetty插件:

<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>com.mycompany.app</groupId>
  <artifactId>demo-webapp</artifactId>
  <packaging>war</packaging>
  <version>1.0-SNAPSHOT</version>
  <name>demo-webapp Maven Webapp</name>
  <url>http://maven.apache.org</url>
  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
      <scope>test</scope>
    </dependency>
  </dependencies>
  <build>
    <finalName>demo-webapp</finalName>

        <!--add below node -->
        <pluginManagement>
                <plugins>
                        <plugin>
                                <groupId>org.mortbay.jetty</groupId>
                                <artifactId>maven-jetty-plugin</artifactId>
								<configuration>
									<stopKey>foo</stopKey>
									<stopPort>9900</stopPort>
								<configuration>
                        </plugin>
                </plugins>
        </pluginManagement>

  </build>
</project>

配置的stopKey与stopPort确保与其它应用不冲突

step 2

在项目目录下执行:

$ maven jetty:run
step 3

当看到如下信息后:

[INFO] Started SelectChannelConnector@0.0.0.0:8080
[INFO] Started Jetty Server

访问:http://localhost:8080/demo-webapp/

step 4

关闭:

新开一个终端进入项目目录,执行:

$ maven jetty:stop

archetype:generate参数说明:

-DgroupId=com.mycompany.app          新建项目的groupId(组织标识)

-DartifactId=myapp                新建项目的artifactId(项目名称)

-DarchetypeArtifactId=maven-archetype-quickstart  新建项目使用的mvn项目骨架

-DinteractiveMode=false              是否使用交互模式,默认是true;如果设为false,那么当maven需要用户进行输入的时候,它会使用一个默认值。

常用的

archetype 说明
maven-archetype-archetype An archetype to generate a sample archetype project.
maven-archetype-j2ee-simple 用于生成简单的J2EE应用程序的原型
maven-archetype-mojo An archetype to generate a sample a sample Maven plugin.
maven-archetype-plugin An archetype to generate a sample Maven plugin.
maven-archetype-plugin-site An archetype to generate a sample Maven plugin site.
maven-archetype-portlet 用于生成JSR-268 Portlet应用的原型
maven-archetype-quickstart 用于生成快速开始的原型
maven-archetype-simple An archetype to generate a simple Maven project.
maven-archetype-site An archetype to generate a sample Maven site which demonstrates some of the supported document types like APT, XDoc, and FML and demonstrates how to i18n your site.
maven-archetype-site-simple An archetype to generate a sample Maven site.
maven-archetype-webapp 用于生成Java Web应用程序的原型