使用maven原型(ArcheType)

简介

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>
        <plugins>
            <plugin>
                <groupId>org.mortbay.jetty</groupId>
                <artifactId>maven-jetty-plugin</artifactId>
                <configuration>
                    <stopKey>foo</stopKey>
                    <stopPort>9900</stopPort>
                </configuration>
            </plugin>
        </plugins>
  </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-archetypeAn archetype to generate a sample archetype project.
maven-archetype-j2ee-simple用于生成简单的J2EE应用程序的原型
maven-archetype-mojoAn archetype to generate a sample a sample Maven plugin.
maven-archetype-pluginAn archetype to generate a sample Maven plugin.
maven-archetype-plugin-siteAn archetype to generate a sample Maven plugin site.
maven-archetype-portlet用于生成JSR-268 Portlet应用的原型
maven-archetype-quickstart用于生成快速开始的原型
maven-archetype-simpleAn archetype to generate a simple Maven project.
maven-archetype-siteAn 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-simpleAn archetype to generate a sample Maven site.
maven-archetype-webapp用于生成Java Web应用程序的原型