-

Maven - 概述

什么是Maven?

Maven是一个项目管理和理解工具。Maven为开发人员提供了一个完整的创建生命周期框架。开发团队几乎可以自动化项目的打下基础设施,因为Maven使用标准目录布局和默认创建生命周期。

在多个开发团队环境的情况下,Maven可以在很短的时间内根据标准设置工作方式。由于大多数项目设置都是简单和可重复使用的,Maven可以在创建报告,检查,创建和测试自动化设置时轻松开发开发人员的生命。

Maven为开发人员提供了管理以下方法:

总而言之,Maven简化了项目创建过程的标准化。它可以无缝地处理编译,分发,文档,团队协作和其他任务。Maven增加了可重用性,并且处理大部分创建相关任务。

Maven历史

Maven最初旨在简化雅加达涡轮项目的建设过程。有几个项目,每个项目包含稍微不同的ANT创建文件。JAR被检查到CVS。

Apache组织然后开发了可以一起创建多个项目的Maven,发布项目信息,部署项目,在多个项目中共享JAR并帮助团队协作。

Maven目标

Maven的主要目标是提供开发人员

Maven项目结构和内容在xml文件中声明,pom.xml称为项目对象模型(POM),它是整个Maven系统的基本单元。有关详细信息,请参阅Maven POM部分。

公约超过配置

Maven使用Convention over Configuration,这意味着开发人员不需要自己创建创建过程。

开发人员不必提及每一个配置细节。Maven为项目提供合理的默认行为。当创建Maven项目时,Maven将创建默认的项目结构。开发人员只需要相应地放置文件,并且他/她不需要在pom.xml中定义任何配置。

作为示例,下表显示了项目源代码文件,资源文件和其他配置的默认值。假设$ {basedir}表示项目位置:

项目 默认
源代码 $ {basedir} / src / main / java
资源 $ {basedir} / src / main / resources
测试 $ {basedir} / src / test
可分发JAR $ {basedir} / target
符合字节码 $ {basedir} / target / classes

为了创建项目,Maven为开发人员提供了提及生命周期目标和项目依赖关系的选项(依赖于Maven pluging功能和默认约定)。Maven插件维护了大量项目管理和创建相关任务。

开发人员可以创建任何给定的Maven项目,而无需了解个人插件的工作原理。有关详细信息,请参阅Maven插件部分。

Maven环境设置

Maven是基于Java的工具,所以第一个要求是在您的机器上安装JDK。

系统要求

JDK 1.5以上。
记忆 没有最低要求。
磁盘空间 没有最低要求。
操作系统 没有最低要求。

步骤1 - 验证机器上的Java安装

现在打开控制台并执行以下java命令。

操作系统 任务命令
Windows 打开命令控制台 c:> java -version
Linux 打开指挥终端 $ java -version
苹果电脑 打开终端 机器:〜joseph $ java -version

我们来验证所有操作系统的输出:

操作系统 输出
Windows java版“1.7.0_75”

Java(TM)SE运行时环境(build 1.7.0_75-b13)

Java HotSpot(TM)客户端虚拟机(创建24.75-b04,混合模式,共享)

Linux java版“1.7.0_75”

Java(TM)SE运行时环境(build 1.7.0_75-b13)

Java HotSpot(TM)客户端虚拟机(创建24.75-b04,混合模式,共享)

苹果电脑 java版“1.7.0_75”

Java(TM)SE运行时环境(build 1.7.0_75-b13)

Java HotSpot(TM)64位服务器虚拟机(创建24.75-b04,混合模式,共享)

如果您没有安装Java,请安装Java软件开发工具包(SDK) http://www.oracle.com/technetwork/java/javase/downloads/index.html我们假设Java 1.7.0_75是本教程的安装版本。

步骤2:设置JAVA环境

JAVA_HOME环境变量设置为指向机器上安装Java的基本目录位置。例如

操作系统 输出
Windows 将环境变量JAVA_HOME设置为C: Program Files Java jdk1.7.0_75
Linux 导出JAVA_HOME = / usr / local / java-current
苹果电脑 导出JAVA_HOME = / Library / Java / Home

将Java编译器位置附加到系统路径。

操作系统 输出
Windows 将字符stringC: Program Files Java jdk1.7.0_75 bin附加到系统变量Path的末尾。
Linux export PATH = $ PATH:$ JAVA_HOME / bin /
苹果电脑 不需要

使用上面解释的java -version命令验证Java安装

步骤3:下载Maven存档

http://maven.apache.org/download.cgi下载Maven 3.3.3

操作系统 存档名称
Windows apache-maven-3.3.3-bin.zip
Linux apache-maven-3.3.3-bin.tar.gz
苹果电脑 apache-maven-3.3.3-bin.tar.gz

步骤4:提取Maven存档

将存档提取到要安装Maven 3.3.3的目录。将从归档文件创建子目录apache-maven-3.3.3。

操作系统 位置(可根据您的安装而有所不同)
Windows C: Program Files Apache Software Foundation apache-maven-3.3.3
Linux / usr / local / apache-maven
苹果电脑 / usr / local / apache-maven

步骤5:设置Maven环境变量

将M2_HOME,M2,MAVEN_OPTS添加到环境变量中。

操作系统输出
Windows 使用系统属性设置环境变量。

M2_HOME = C: Program Files Apache Software Foundation apache-maven-3.3.3

M2 =%M2_HOME% bin

MAVEN_OPTS = -Xms256m -Xmx512m

Linux 打开命令终端并设置环境变量。

导出M2_HOME = / usr / local / apache-maven / apache-maven-3.3.3

导出M2 = $ M2_HOME / bin

导出MAVEN_OPTS = -Xms256m -Xmx512m

苹果电脑 打开命令终端并设置环境变量。

导出M2_HOME = / usr / local / apache-maven / apache-maven-3.3.3

导出M2 = $ M2_HOME / bin

导出MAVEN_OPTS = -Xms256m -Xmx512m

步骤6:将Maven bin目录位置添加到系统路径

现在将M2变量附加到系统路径

操作系统 输出
Windows 将字符string;%M2%追加到系统变量Path的末尾。
Linux export PATH = $ M2:$ PATH
苹果电脑 export PATH = $ M2:$ PATH

步骤7:验证Maven安装

现在打开控制台,执行以下mvn命令。

操作系统 任务 命令
Windows 打开命令控制台 c:> mvn --version
Linux 打开指挥终端 $ mvn --version
苹果电脑 打开终端 机器:〜joseph $ mvn --version

最后,验证以上命令的输出结果,具体如下:

操作系统 输出
Windows Apache Maven 3.3.3(7994120775791599e205a5524ec3e0dfe41d4a06; 2015-04-22T17:27:37 + 05:30)

Maven主页:C: Program Files Apache Software Foundation apache-maven-3.3.3

Java版本:1.7.0_75,供应商:Oracle Corporation

Java home:C: Program Files Java jdk1.7.0_75 jre

默认语言环境:en_US,平台编码:Cp1252

Linux Apache Maven 3.3.3(7994120775791599e205a5524ec3e0dfe41d4a06; 2015-04-22T17:27:37 + 05:30)

Maven主页:/usr/local/apache-maven/apache-maven-3.3.3

Java版本:1.7.0_75,供应商:Oracle Corporation

Java主页:/usr/local/java-current/jdk1.7.0_75/jre

苹果电脑 Apache Maven 3.3.3(7994120775791599e205a5524ec3e0dfe41d4a06; 2015-04-22T17:27:37 + 05:30)

Maven主页:/usr/local/apache-maven/apache-maven-3.3.3

Java版本:1.7.0_75,供应商:Oracle Corporation

Java home:/Library/Java/Home/jdk1.7.0_75/jre

恭喜!您现在都将使用Apache Maven作为您的项目。

Maven POM

POM代表项目对象模型这是Maven的基本工作单位。它是一个XML文件。它始终作为pom.xml驻留在项目的基本目录中。

POM包含有关项目的信息以及Maven用于创建项目的各种配置详细信息。

POM还包含目标和插件。在执行任务或目标时,Maven会在当前目录中查找POM。它读取POM,获取所需的配置信息,然后执行目标。可以在POM中指定的一些配置如下:

在创建POM之前,我们应该首先确定项目(groupId),其name(artifactId)及其版本,因为这些属性有助于在存储库中唯一标识项目。

示例POM

<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>com.companyname.project-group</groupId>
   <artifactId>project</artifactId>
   <version>1.0</version>
 
</project>

应该注意的是,每个项目应该有一个POM文件。

节点 描述
groupId 这是项目组的ID。这在组织或项目中通常是独一无二的。例如,一家银行集团com.company.bank拥有所有银行相关项目。
artifactId 这是项目的ID。这通常是项目的名称。例如,消费银行。与groupId一起,artifactId定义了工件在存储库中的位置。
这是项目的版本。使用groupId,它在工件的存储库中用于将版本彼此分离。例如:

com.company.bank:consumer-banking:1.0

com.company.bank:consumer-banking:1.1。

超级POM

所有POM都从父级继承(尽管已明确定义)。这个基础POM被称为超级POM,并包含默认值继承的值。

Maven使用有效的pom(配置从超级pom加项目配置)执行相关目标。它帮助开发人员在他/她的pom.xml中指定最小配置细节。虽然可以轻松地覆盖配置。

查看超级POM的默认配置的简单方法是运行以下命令:mvn help:effective-pom

在您的计算机上的任何目录中创建一个pom.xml。使用上述示例pom的内容。

在下面的例子中,我们在C: MVN project文件夹中创建了一个pom.xml。

现在打开命令控制台,去包含pom.xml的文件夹,然后执行下面的mvn命令。

C:MVNproject>mvn help:effective-pom

Maven将开始处理和显示有效的pom。

[INFO] Scanning for projects...
[INFO] Searching repository for plugin with prefix: "help".
[INFO] ------------------------------------------------------------------------
[INFO] Building Unnamed - com.companyname.project-group:project-name:jar:1.0
[INFO]    task-segment: [help:effective-pom] (aggregator-style)
[INFO] ------------------------------------------------------------------------
[INFO] [help:effective-pom {execution: default-cli}]
[INFO]

.....

[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESSFUL
[INFO] ------------------------------------------------------------------------
[INFO] Total time: < 1 second
[INFO] Finished at: Thu Jul 05 11:41:51 IST 2012
[INFO] Final Memory: 6M/15M
[INFO] ------------------------------------------------------------------------

在控制台中显示有效的POM,继承,插值和配置文件后应用。

<!-- ====================================================================== -->
<!--                                                                        -->
<!-- Generated by Maven Help Plugin on 2015-09-26T07:51:19                  -->
<!-- See: http://maven.apache.org/plugins/maven-help-plugin/                -->
<!--                                                                        -->
<!-- ====================================================================== -->

<!-- ====================================================================== -->
<!--                                                                        -->
<!-- Effective POM for project                                              -->
<!-- "com.companyname.project-group:project:jar:1.0"                        -->
<!--                                                                        -->
<!-- ====================================================================== -->

<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 h
ttp://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.companyname.project-group</groupId>
  <artifactId>project</artifactId>
  <version>1.0</version>
  <repositories>
    <repository>
      <snapshots>
        <enabled>false</enabled>
      </snapshots>
      <id>central</id>
      <name>Central Repository</name>
      <url>https://repo.maven.apache.org/maven2</url>
    </repository>
  </repositories>
  <pluginRepositories>
    <pluginRepository>
      <releases>
        <updatePolicy>never</updatePolicy>
      </releases>
      <snapshots>
        <enabled>false</enabled>
      </snapshots>
      <id>central</id>
      <name>Central Repository</name>
      <url>https://repo.maven.apache.org/maven2</url>
    </pluginRepository>
  </pluginRepositories>
  <build>
    <sourceDirectory>C:MVNprojectsrcmainjava</sourceDirectory>
    <scriptSourceDirectory>C:MVNprojectsrcmainscripts</scriptSourceDirector
y>
    <testSourceDirectory>C:MVNprojectsrc	estjava</testSourceDirectory>
    <outputDirectory>C:MVNproject	argetclasses</outputDirectory>
    <testOutputDirectory>C:MVNproject	arget	est-classes</testOutputDirectory
>
    <resources>
      <resource>
        <directory>C:MVNprojectsrcmain
esources</directory>
      </resource>
    </resources>
    <testResources>
      <testResource>
        <directory>C:MVNprojectsrc	est
esources</directory>
      </testResource>
    </testResources>
    <directory>C:MVNproject	arget</directory>
    <finalName>project-1.0</finalName>
    <pluginManagement>
      <plugins>
        <plugin>
          <artifactId>maven-antrun-plugin</artifactId>
          <version>1.3</version>
        </plugin>
        <plugin>
          <artifactId>maven-assembly-plugin</artifactId>
          <version>2.2-beta-5</version>
        </plugin>
        <plugin>
          <artifactId>maven-dependency-plugin</artifactId>
          <version>2.8</version>
        </plugin>
        <plugin>
          <artifactId>maven-release-plugin</artifactId>
          <version>2.3.2</version>
        </plugin>
      </plugins>
    </pluginManagement>
    <plugins>
      <plugin>
        <artifactId>maven-clean-plugin</artifactId>
        <version>2.5</version>
        <executions>
          <execution>
            <id>default-clean</id>
            <phase>clean</phase>
            <goals>
              <goal>clean</goal>
            </goals>
          </execution>
        </executions>
      </plugin>
      <plugin>
        <artifactId>maven-install-plugin</artifactId>
        <version>2.4</version>
        <executions>
          <execution>
            <id>default-install</id>
            <phase>install</phase>
            <goals>
              <goal>install</goal>
            </goals>
          </execution>
        </executions>
      </plugin>
      <plugin>
        <artifactId>maven-resources-plugin</artifactId>
        <version>2.6</version>
        <executions>
          <execution>
            <id>default-resources</id>
            <phase>process-resources</phase>
            <goals>
              <goal>resources</goal>
            </goals>
          </execution>
          <execution>
            <id>default-testResources</id>
            <phase>process-test-resources</phase>
            <goals>
              <goal>testResources</goal>
            </goals>
          </execution>
        </executions>
      </plugin>
      <plugin>
        <artifactId>maven-surefire-plugin</artifactId>
        <version>2.12.4</version>
        <executions>
          <execution>
            <id>default-test</id>
            <phase>test</phase>
            <goals>
              <goal>test</goal>
            </goals>
          </execution>
        </executions>
      </plugin>
      <plugin>
        <artifactId>maven-compiler-plugin</artifactId>
        <version>3.1</version>
        <executions>
          <execution>
            <id>default-testCompile</id>
            <phase>test-compile</phase>
            <goals>
              <goal>testCompile</goal>
            </goals>
          </execution>
          <execution>
            <id>default-compile</id>
            <phase>compile</phase>
            <goals>
              <goal>compile</goal>
            </goals>
          </execution>
        </executions>
      </plugin>
      <plugin>
        <artifactId>maven-jar-plugin</artifactId>
        <version>2.4</version>
        <executions>
          <execution>
            <id>default-jar</id>
            <phase>package</phase>
            <goals>
              <goal>jar</goal>
            </goals>
          </execution>
        </executions>
      </plugin>
      <plugin>
        <artifactId>maven-deploy-plugin</artifactId>
        <version>2.7</version>
        <executions>
          <execution>
            <id>default-deploy</id>
            <phase>deploy</phase>
            <goals>
              <goal>deploy</goal>
            </goals>
          </execution>
        </executions>
      </plugin>
      <plugin>
        <artifactId>maven-site-plugin</artifactId>
        <version>3.3</version>
        <executions>
          <execution>
            <id>default-site</id>
            <phase>site</phase>
            <goals>
              <goal>site</goal>
            </goals>
            <configuration>
              <outputDirectory>C:MVNproject	argetsite</outputDirectory>
              <reportPlugins>
                <reportPlugin>
                  <groupId>org.apache.maven.plugins</groupId>
                  <artifactId>maven-project-info-reports-plugin</artifactId>
                </reportPlugin>
              </reportPlugins>
            </configuration>
          </execution>
          <execution>
            <id>default-deploy</id>
            <phase>site-deploy</phase>
            <goals>
              <goal>deploy</goal>
            </goals>
            <configuration>
              <outputDirectory>C:MVNproject	argetsite</outputDirectory>
              <reportPlugins>
                <reportPlugin>
                  <groupId>org.apache.maven.plugins</groupId>
                  <artifactId>maven-project-info-reports-plugin</artifactId>
                </reportPlugin>
              </reportPlugins>
            </configuration>
          </execution>
        </executions>
        <configuration>
          <outputDirectory>C:MVNproject	argetsite</outputDirectory>
          <reportPlugins>
            <reportPlugin>
              <groupId>org.apache.maven.plugins</groupId>
              <artifactId>maven-project-info-reports-plugin</artifactId>
            </reportPlugin>
          </reportPlugins>
        </configuration>
      </plugin>
    </plugins>
  </build>
  <reporting>
    <outputDirectory>C:MVNproject	argetsite</outputDirectory>
  </reporting>
</project>

在上述pom.xml中,您可以在执行所需目标时看到默认的项目源文件夹结构,输出目录,必需的插件,存储库,Maven将使用的报告目录。

Maven pom.xml也不需要手动写入。

Maven提供了许多prototype插件来创建项目,以便创建项目结构和pom.xml

详细信息在Maven插件Maven创建项目部分中提到

Maven创建生命周期

什么是创建生命周期?

创建生命周期是一个良好定义的限定在其中的目标是要被执行的顺序相的序列。这里的阶段是生命周期的一个阶段。

例如,典型的Maven创建生命周期由以下的阶段组成

把手 描述
准备资源 资源复制 资源复制可以在这个阶段进行定制。
编译 汇编 源代码编译在这个阶段完成。
打包 此阶段将按照POM.xml中的打包方式创建JAR / WAR包。
安装安装 此阶段将软件包安装在本地/远程的maven存储库中。

总有一些前期后期阶段,可用于注册目标,必须之前或特定阶段之后运行。

当Maven开始创建项目时,它将逐步执行一个定义的阶段序列,并执行在每个阶段注册的目标。Maven有以下三个标准生命周期:

一个目标代表了一个有助于项目建设和管理的具体任务。它可能被限制在零个或多个创建阶段。不限于任何创建阶段的目标可以通过直接调用在创建生命周期之外执行。

执行顺序取决于调用目标和创建阶段的顺序。例如,考虑下面的命令。clean和package参数是创建阶段,而依赖关系:copy-dependencies是一个目标。

mvn clean dependency:copy-dependencies package

这里首先执行干净阶段,然后执行依赖关系:依赖关系的目标,最后执行相。

清洁生命周期

当我们执行mvn post-clean命令时,Maven调用包含以下阶段的清洁生命周期。

Maven的清洁目标(清洁:清洁)绑定到干净的清洁生命周期阶段。它的干净:干净的目标通过删除创建目录来删除创建的输出。因此,当mvn clean命令执行时,Maven将删除创建目录。

我们可以通过提及清洁生命周期的上述任何阶段中的目标来定制此行为。

在下面的例子中,我们将附加maven-antrun-plugin:运行目标到预清洁,清洁和清洁后阶段。这将允许我们回显显示清洁生命周期阶段的短信息。

我们在C: MVN project文件夹中创建了一个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>com.companyname.projectgroup</groupId>
<artifactId>project</artifactId>
<version>1.0</version>
<build>
<plugins>
   <plugin>
   <groupId>org.apache.maven.plugins</groupId>
   <artifactId>maven-antrun-plugin</artifactId>
   <version>1.1</version>
   <executions>
      <execution>
         <id>id.pre-clean</id>
         <phase>pre-clean</phase>
         <goals>
            <goal>run</goal>
         </goals>
         <configuration>
            <tasks>
               <echo>pre-clean phase</echo>
            </tasks>
         </configuration>
      </execution>
      <execution>
         <id>id.clean</id>
         <phase>clean</phase>
         <goals>
          <goal>run</goal>
         </goals>
         <configuration>
            <tasks>
               <echo>clean phase</echo>
            </tasks>
         </configuration>
      </execution>
      <execution>
         <id>id.post-clean</id>
         <phase>post-clean</phase>
         <goals>
            <goal>run</goal>
         </goals>
         <configuration>
            <tasks>
               <echo>post-clean phase</echo>
            </tasks>
         </configuration>
      </execution>
   </executions>
   </plugin>
</plugins>
</build>
</project>

现在打开命令控制台,转到包含pom.xml的文件夹,然后执行以下mvn命令。

C:MVNproject>mvn post-clean

Maven将开始处理和显示清洁生命周期的所有阶段

[INFO] Scanning for projects...
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Building project 1.0
[INFO] ------------------------------------------------------------------------
[INFO]
[INFO] --- maven-antrun-plugin:1.1:run (id.pre-clean) @ project ---
[INFO] Executing tasks
     [echo] pre-clean phase
[INFO] Executed tasks
[INFO]
[INFO] --- maven-clean-plugin:2.5:clean (default-clean) @ project ---
[INFO]
[INFO] --- maven-antrun-plugin:1.1:run (id.clean) @ project ---
[INFO] Executing tasks
     [echo] clean phase
[INFO] Executed tasks
[INFO]
[INFO] --- maven-antrun-plugin:1.1:run (id.post-clean) @ project ---
[INFO] Executing tasks
     [echo] post-clean phase
[INFO] Executed tasks
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 2.078 s
[INFO] Finished at: 2015-09-26T08:03:06+05:30
[INFO] Final Memory: 7M/247M
[INFO] ------------------------------------------------------------------------

您可以尝试调整 mvn clean命令,这将显示预清洁清洁,没有任何内容将执行后清洁阶段。

默认(或创建)生命周期

这是Maven的主要生命周期,用于创建应用程序。它有23个阶段。

生命周期阶段 描述
验证 验证项目是否正确,并且所有必需的信息都可用于完成创建过程。
初始化 初始化创建状态,例如设置属性
生成源 生成要包含在编译阶段的任何源代码。
流程来源 处理源代码,例如,过滤任何值。
生成资源 生成包含在包中的资源。
流程资源 将资源复制并处理到目标目录,准备打包阶段。
编译 编译项目的源代码。
过程类 从编译中处理生成的文件,例如对Java类进行字节码增强/优化。
生成测试源 生成要包含在编译阶段的任何测试源代码。
过程测试源 处理测试源代码,例如过滤任何值。
测试编译 将测试源代码编译成测试目标目录。
过程测试类 从测试代码文件编译处理生成的文件。
测试 使用合适的单元测试框架运行测试(Junit是一个)。
准备包装 在实际包装之前,执行必要的操作来准备包装。
拿出编译的代码,并以其可分发的格式打包,例如JAR,WAR或EAR文件。
预集成测试 在执行集成测试之前执行所需的操作。例如,设置所需的环境。
集成测试 如果需要,可以将该包过程并部署到可以运行集成测试的环境中。
后整合测试 执行集成测试后执行所需的操作。例如,清理环境。
校验 运行任何检查以验证包装是否有效并符合质量标准。
安装 将软件包安装到本地存储库中,可以将其用作本地其他项目的依赖项。
部署 将最终软件包复制到远程存储库,以便与其他开发人员和项目共享。

有关Maven生命周期的几个重要概念值得一提:

在下面的示例中,我们将附加maven-antrun-plugin:运行目标到Build生命周期的几个阶段。这将允许我们回显显示生命周期阶段的短信。

我们已经在C: MVN project文件夹中更新了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>com.companyname.projectgroup</groupId>
<artifactId>project</artifactId>
<version>1.0</version>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-antrun-plugin</artifactId>
<version>1.1</version>
<executions>
   <execution>
      <id>id.validate</id>
      <phase>validate</phase>
      <goals>
         <goal>run</goal>
      </goals>
      <configuration>
         <tasks>
            <echo>validate phase</echo>
         </tasks>
      </configuration>
   </execution>
   <execution>
      <id>id.compile</id>
      <phase>compile</phase>
      <goals>
         <goal>run</goal>
      </goals>
      <configuration>
         <tasks>
            <echo>compile phase</echo>
         </tasks>
      </configuration>
   </execution>
   <execution>
      <id>id.test</id>
      <phase>test</phase>
      <goals>
         <goal>run</goal>
      </goals>
      <configuration>
         <tasks>
            <echo>test phase</echo>
         </tasks>
      </configuration>
   </execution>
   <execution>
         <id>id.package</id>
         <phase>package</phase>
         <goals>
            <goal>run</goal>
         </goals>
         <configuration>
         <tasks>
            <echo>package phase</echo>
         </tasks>
      </configuration>
   </execution>
   <execution>
      <id>id.deploy</id>
      <phase>deploy</phase>
      <goals>
         <goal>run</goal>
      </goals>
      <configuration>
      <tasks>
         <echo>deploy phase</echo>
      </tasks>
      </configuration>
   </execution>
</executions>
</plugin>
</plugins>
</build>
</project>

现在打开命令控制台,去包含pom.xml的文件夹,然后执行下面的mvn命令。

C:MVNproject>mvn compile

Maven将开始处理和显示创建生命周期的阶段,直到编译阶段。

[INFO] Scanning for projects...
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Building project 1.0
[INFO] ------------------------------------------------------------------------
[INFO]
[INFO] --- maven-antrun-plugin:1.1:run (id.validate) @ project ---
[INFO] Executing tasks
     [echo] validate phase
[INFO] Executed tasks
[INFO]
[INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ project --
-
[WARNING] Using platform encoding (Cp1252 actually) to copy filtered resources,
i.e. build is platform dependent!
[INFO] skip non existing resourceDirectory C:MVNprojectsrcmain
esources
[INFO]
[INFO] --- maven-compiler-plugin:3.1:compile (default-compile) @ project ---
[INFO] No sources to compile
[INFO]
[INFO] --- maven-antrun-plugin:1.1:run (id.compile) @ project ---
[INFO] Executing tasks
     [echo] compile phase
[INFO] Executed tasks
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 3.704 s
[INFO] Finished at: 2015-09-26T08:22:05+05:30
[INFO] Final Memory: 10M/247M
[INFO] ------------------------------------------------------------------------

网站生命周期

Maven Site plugin通常用于创建新的文档来创建报告,部署站点等。

阶段

在以下示例中,我们将附加 maven-antrun-plugin:运行目标到站点生命周期的所有阶段。这将允许我们回显显示生命周期阶段的短信。

我们已经在C: MVN project文件夹中更新了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>com.companyname.projectgroup</groupId>
<artifactId>project</artifactId>
<version>1.0</version>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-antrun-plugin</artifactId>
<version>1.1</version>
   <executions>
      <execution>
         <id>id.pre-site</id>
         <phase>pre-site</phase>
         <goals>
            <goal>run</goal>
         </goals>
         <configuration>
            <tasks>
               <echo>pre-site phase</echo>
            </tasks>
         </configuration>
      </execution>
      <execution>
         <id>id.site</id>
         <phase>site</phase>
         <goals>
         <goal>run</goal>
         </goals>
         <configuration>
            <tasks>
               <echo>site phase</echo>
            </tasks>
         </configuration>
      </execution>
      <execution>
         <id>id.post-site</id>
         <phase>post-site</phase>
         <goals>
            <goal>run</goal>
         </goals>
         <configuration>
            <tasks>
               <echo>post-site phase</echo>
            </tasks>
         </configuration>
      </execution>
      <execution>
         <id>id.site-deploy</id>
         <phase>site-deploy</phase>
         <goals>
            <goal>run</goal>
         </goals>
         <configuration>
            <tasks>
               <echo>site-deploy phase</echo>
            </tasks>
         </configuration>
      </execution>
   </executions>
</plugin>
</plugins>
</build>
</project>

现在打开命令控制台,去包含pom.xml的文件夹,然后执行下面的mvn命令。

C:MVNproject>mvn site

Maven将开始处理和显示站点生命周期的阶段。

[INFO] Scanning for projects...
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Building project 1.0
[INFO] ------------------------------------------------------------------------
[INFO]
[INFO] --- maven-antrun-plugin:1.1:run (id.pre-site) @ project ---
[INFO] Executing tasks
     [echo] pre-site phase
[INFO] Executed tasks
[INFO]
[INFO] --- maven-site-plugin:3.3:site (default-site) @ project ---
[WARNING] Report plugin org.apache.maven.plugins:maven-project-info-reports-plug
in has an empty version.
[WARNING]
[WARNING] It is highly recommended to fix these problems because they threaten t
he stability of your build.
[WARNING]
[WARNING] For this reason, future Maven versions might no longer support buildin
g such malformed projects.
[INFO] configuring report plugin org.apache.maven.plugins:maven-project-info-rep
orts-plugin:2.8.1
[WARNING] No project URL defined - decoration links will not be relativized!
[INFO] Rendering site with org.apache.maven.skins:maven-default-skin:jar:1.0 ski
n.
[INFO] Generating "Dependency Convergence" report    --- maven-project-info-repo
rts-plugin:2.8.1
[INFO] Generating "Dependency Information" report    --- maven-project-info-repo
rts-plugin:2.8.1
[INFO] Generating "About" report    --- maven-project-info-reports-plugin:2.8.1
[INFO] Generating "Plugin Management" report    --- maven-project-info-reports-p
lugin:2.8.1
[INFO] Generating "Project Plugins" report    --- maven-project-info-reports-plu
gin:2.8.1
[INFO] Generating "Project Summary" report    --- maven-project-info-reports-plu
gin:2.8.1
[INFO]
[INFO] --- maven-antrun-plugin:1.1:run (id.site) @ project ---
[INFO] Executing tasks
     [echo] site phase
[INFO] Executed tasks
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 11.390 s
[INFO] Finished at: 2015-09-26T08:43:45+05:30
[INFO] Final Memory: 18M/247M
[INFO] ------------------------------------------------------------------------

Maven创建配置文件

什么是Build Profile?

建造轮廓是一组可以用来设置或覆盖Maven创建的默认值配置值。使用创建配置文件,您可以为不同的环境(如生产 v / s 开发环境)定制创建。

Profiles在pom.xml文件中使用其activeProfiles / profiles元素指定,并以各种方式触发。配置文件在创建时修改POM,并用于为参数提供不同的目标环境(例如,开发,测试和生产环境中数据库服务器的路径)。

创建配置文件的类型

创建轮廓主要有三种类型

类型 在哪里定义
每项目 在项目POM文件中定义,pom.xml
每个用户 在Maven设置中定义xml文件(%USER_HOME%/。m2 / settings.xml)
全球 定义在Maven全局设置中的xml文件(%M2_HOME%/ conf / settings.xml)

档案激活

可以以各种方式激活Maven创建配置文件。

配置文件激活示例

让我们假设您的项目的以下目录结构:

Maven创建配置文件

现在,在src / main / resources下有三个环境特定的文件:

文件名 描述
env.properties 如果没有提到配置文件,则使用默认配置
env.test.properties 测试配置文件使用时的测试配置。
env.prod.properties 使用prod profile时的生产配置。

显式配置文件激活

在下面的例子中,我们将附加maven-antrun-plugin:run目标到测试阶段。这将允许我们回显不同配置文件的短信。我们将使用pom.xml来定义不同的配置文件,并使用maven命令在命令控制台上激活配置文件。

假设我们在C: MVN project文件夹中创建了以下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>com.companyname.projectgroup</groupId>
   <artifactId>project</artifactId>
   <version>1.0</version>
   <profiles>
      <profile>
      <id>test</id>
      <build>
      <plugins>
         <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-antrun-plugin</artifactId>
            <version>1.1</version>
            <executions>
               <execution>
                  <phase>test</phase>
                  <goals>
                     <goal>run</goal>
                  </goals>
                  <configuration>
                  <tasks>
                     <echo>Using env.test.properties</echo>
            <copy file="src/main/resources/env.test.properties" tofile
		    ="${project.build.outputDirectory}/env.properties"/>
                  </tasks>
                  </configuration>
               </execution>
            </executions>
         </plugin>
      </plugins>
      </build>
      </profile>
   </profiles>
   <dependencies>
      <dependency>
         <groupId>junit</groupId>
         <artifactId>junit</artifactId>
         <version>3.8.1</version>
         <scope>test</scope>
      </dependency>
   </dependencies>
</project>

假设我们在C: MVN project src resources文件夹中创建了以下属性文件。

env.properties

environment=debug

env.test.properties

environment=test

env.prod.properties

environment=prod

现在打开命令控制台,转到包含pom.xml的文件夹,然后执行以下mvn命令。使用-P选项传递配置文件名称作为参数。

C:MVNproject>mvn test -Ptest

Maven将开始处理并显示测试创建配置文件的结果。

[INFO] Scanning for projects...
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Building project 1.0
[INFO] ------------------------------------------------------------------------
[INFO]
[INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ project --
-
[WARNING] Using platform encoding (Cp1252 actually) to copy filtered resources,
i.e. build is platform dependent!
[INFO] Copying 3 resources
[INFO]
[INFO] --- maven-compiler-plugin:3.1:compile (default-compile) @ project ---
[INFO] Nothing to compile - all classes are up to date
[INFO]
[INFO] --- maven-resources-plugin:2.6:testResources (default-testResources) @ pr
oject ---
[WARNING] Using platform encoding (Cp1252 actually) to copy filtered resources,
i.e. build is platform dependent!
[INFO] skip non existing resourceDirectory C:MVNprojectsrc	est
esources
[INFO]
[INFO] --- maven-compiler-plugin:3.1:testCompile (default-testCompile) @ project
 ---
[INFO] Nothing to compile - all classes are up to date
[INFO]
[INFO] --- maven-surefire-plugin:2.12.4:test (default-test) @ project ---
[INFO] Surefire report directory: C:MVNproject	argetsurefire-reports

-------------------------------------------------------
 T E S T S
-------------------------------------------------------
Running com.companyname.bank.AppTest
Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.016 sec

Results :

Tests run: 1, Failures: 0, Errors: 0, Skipped: 0

[INFO]
[INFO] --- maven-antrun-plugin:1.1:run (default) @ project ---
[INFO] Executing tasks
     [echo] Using env.test.properties
[INFO] Executed tasks
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 4.953 s
[INFO] Finished at: 2015-09-27T11:54:45+05:30
[INFO] Final Memory: 9M/247M
[INFO] ------------------------------------------------------------------------

现在作为练习,您可以执行以下步骤

现在打开命令控制台,转到包含pom.xml的文件夹,然后执行以下mvn命令。使用-P选项将配置文件名称作为参数传递。

C:MVNproject>mvn test -Pnormal
C:MVNproject>mvn test -Pprod

检查创建的输出以查看差异。

通过Maven设置配置文件激活

在%USER_HOME%/。m2目录中打开Maven settings.xml文件,其中%USER_HOME%表示用户主目录。如果settings.xml文件不存在,请创建一个新的。

使用activeProfiles节点将测试配置文件添加为活动配置文件,如下例所示

<settings 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/settings-1.0.0.xsd">
   <mirrors>
      <mirror>
         <id>maven.dev.snaponglobal.com</id>
         <name>Internal Artifactory Maven repository</name>
         <url>http://repo1.maven.org/maven2/</url>
         <mirrorOf>*</mirrorOf>
      </mirror>
   </mirrors>
   <activeProfiles>
      <activeProfile>test</activeProfile>
   </activeProfiles>
</settings>

现在打开命令控制台,转到包含pom.xml的文件夹,然后执行以下mvn命令。不要使用-P选项传递配置文件名称.Maven将显示测试配置文件为活动配置文件的结果。

C:MVNproject>mvn test

通过环境变量配置文件激活

现在删除maven settings.xml中的活动配置文件,并更新pom.xml中提到的测试配置文件。将激活元素添加到配置文件元素,如下所示。

当系统属性“env”用值“test”指定时,测试配置文件将触发。创建环境变量“env”并将其值设置为“test”。

<profile>
   <id>test</id>
   <activation>
      <property>
         <name>env</name>
         <value>test</value>
      </property>
   </activation>
</profile>

让我们打开命令控制台,转到包含pom.xml的文件夹,然后执行下面的mvn命令。

C:MVNproject>mvn test

通过操作系统配置文件激活

激活元素包括os细节,如下所示。当系统是Windows XP时,此测试配置文件将触发。

<profile> <id> test </ id> <activation> <os> <name> Windows XP </ name> <family> Windows </ family> <arch> x86 </ arch> <version> 5.1.2600 <版本> </ os> </ activation> </ profile>
   
   
      
         
         
         
         
      
   

现在打开命令控制台,转到包含pom.xml的文件夹,然后执行以下mvn命令。不要使用-P选项传递配置文件名称.Maven将显示测试配置文件为活动配置文件的结果。

C:MVNproject>mvn test

配置文件激活通过现在/缺少文件

现在激活元素包括os细节如下所示。target / generated-sources / axistools / wsdl2java / com / companyname / group丢失时,测试配置文件将触发

<profile>
   <id>test</id>
   <activation>
      <file>
         <missing>target/generated-sources/axistools/wsdl2java/
		 com/companyname/group</missing>
      </file>
   </activation>
</profile>

现在打开命令控制台,转到包含pom.xml的文件夹,然后执行以下mvn命令。不要使用-P选项传递配置文件名称.Maven将显示测试配置文件为活动配置文件的结果。

C:MVNproject>mvn test

Maven存储库

在Maven术语中,存储库是一个位置,即所有项目jar,库jar,插件或任何其他项目特定工件都存储并可以轻松使用的目录。

Maven存储库有三种类型

本地存储库

Maven本地存储库是您机器上的文件夹位置。当您第一次运行任何maven命令时,它将被创建。

Maven本地存储库保持您的项目的所有依赖(库jars,插件jar等)。当您运行Maven创建时,Maven会自动将所有依赖关系jar下载到本地存储库。它有助于避免在每次创建项目时存储在远程机器上的依赖关系。

默认情况下,Maven本地存储库由%USER_HOME%目录中的Maven创建。要覆盖默认位置,请在%M2_HOME% conf目录中提供Maven settings.xml文件中的另一个路径。

<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 
   http://maven.apache.org/xsd/settings-1.0.0.xsd">
      <localRepository>C:/MyLocalRepository</localRepository>
</settings>

当您运行Maven命令时,Maven会将依赖关系下载到您的自定义路径。

中央存储库

Maven中央存储库是由Maven社区提供的存储库。它包含大量常用的库。

当Maven在本地存储库中没有找到任何依赖关系时,它将使用以下URL开始在中央存储库中进行搜索:http : //repo1.maven.org/maven2/

中央信息库的关键概念

要浏览中央maven仓库的内容,maven社区提供了一个URL:http : //search.maven.org/#browse使用此库,开发人员可以搜索中央存储库中的所有可用库。

远程存储库

有时候,Maven在中央存储库中没有找到提到的依赖关系,因此它停止了创建过程和输出错误消息到控制台。为了防止这种情况,Maven提供了远程存储库的概念,这是开发人员自己的定制存储库,其中包含所需的库或其他项目jar。

例如,使用下面提到的POM.xml,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/xsd/maven-4.0.0.xsd">
   <modelVersion>4.0.0</modelVersion>
   <groupId>com.companyname.projectgroup</groupId>
   <artifactId>project</artifactId>
   <version>1.0</version>
   <dependencies>
      <dependency>
         <groupId>com.companyname.common-lib</groupId>
         <artifactId>common-lib</artifactId>
         <version>1.0.0</version>
      </dependency>
   <dependencies>
   <repositories>
      <repository>
         <id>companyname.lib1</id>
         <url>http://download.companyname.org/maven2/lib1</url>
      </repository>
      <repository>
         <id>companyname.lib2</id>
         <url>http://download.companyname.org/maven2/lib2</url>
      </repository>
   </repositories>
</project>

Maven依赖搜索序列

当我们执行Maven创建命令时,Maven将按照以下顺序开始查找依赖库:

Maven插件

什么是Maven插件?

Maven实际上是一个插件执行框架,每个任务实际上都是由插件完成的。Maven插件通常用于:

插件通常提供一组目标,可以使用以下语法执行:

mvn [plugin-name]:[goal-name]

例如,通过运行以下命令,可以使用maven-compiler-plugin的编译目标来编译Java项目

mvn compiler:compile

插件类型

Maven提供了以下两种类型的插件:

类型 描述
创建插件 它们在创建期间执行,并且应在pom.xml的<build />元素中进行配置
报告插件 它们在站点生成期间执行,并且应在pom.xml的<reporting />元素中进行配置

以下是几个常见插件的列表:

插入 描述
清洁 建造后清理目标。删除目标目录。
编译器 编译Java源文件。
surefile 运行JUnit单元测试。创建测试报告。
从当前项目创建一个JAR文件。
战争 从当前项目创建一个WAR文件。
javadoc 为项目生成Javadoc。
Ant 从创建提到的任何阶段运行一组Ant任务。

示例

我们在我们的示例中广泛使用了maven-antrun-plugin来在控制台上打印数据。请参阅Maven创建配置文件一章。让我们以更好的方式了解它,让我们在C: MVN project文件夹中创建一个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>com.companyname.projectgroup</groupId>
<artifactId>project</artifactId>
<version>1.0</version>
<build>
<plugins>
   <plugin>
   <groupId>org.apache.maven.plugins</groupId>
   <artifactId>maven-antrun-plugin</artifactId>
   <version>1.1</version>
   <executions>
      <execution>
         <id>id.clean</id>
         <phase>clean</phase>
         <goals>
            <goal>run</goal>
         </goals>
         <configuration>
            <tasks>
               <echo>clean phase</echo>
            </tasks>
         </configuration>
      </execution>     
   </executions>
   </plugin>
</plugins>
</build>
</project>

接下来,打开命令控制台,并转到包含pom.xml的文件夹,然后执行以下mvn命令。

C:MVNproject>mvn clean

Maven将开始处理和显示清洁生命周期的清洁阶段

[INFO] Scanning for projects...
[INFO] ------------------------------------------------------------------
[INFO] Building Unnamed - com.companyname.projectgroup:project:jar:1.0
[INFO]    task-segment: [post-clean]
[INFO] ------------------------------------------------------------------
[INFO] [clean:clean {execution: default-clean}]
[INFO] [antrun:run {execution: id.clean}]
[INFO] Executing tasks
     [echo] clean phase
[INFO] Executed tasks
[INFO] ------------------------------------------------------------------
[INFO] BUILD SUCCESSFUL
[INFO] ------------------------------------------------------------------
[INFO] Total time: < 1 second
[INFO] Finished at: Sat Jul 07 13:38:59 IST 2012
[INFO] Final Memory: 4M/44M
[INFO] ------------------------------------------------------------------

上面的例子说明了以下关键概念:

使用Maven创建Java项目

Maven使用prototype插件创建项目。要创建一个简单的java应用程序,我们将使用maven-archetype-quickstart插件。在下面的例子中,我们将在C: MVN文件夹中创建一个基于maven的java应用程序项目。

我们打开命令控制台,执行C: MVN目录并执行下面的mvn命令。

C:MVN>mvn archetype:generate
-DgroupId=com.companyname.bank 
-DartifactId=consumerBanking 
-DarchetypeArtifactId=maven-archetype-quickstart 
-DinteractiveMode=false

Maven将开始处理,并将创建完整的java应用程序项目结构。

[INFO] Scanning for projects...
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Building Maven Stub Project (No POM) 1
[INFO] ------------------------------------------------------------------------
[INFO]
[INFO] >>> maven-archetype-plugin:2.4:generate (default-cli) > generate-sources
@ standalone-pom >>>
[INFO]
[INFO] <<< maven-archetype-plugin:2.4:generate (default-cli) < generate-sources
@ standalone-pom <<<
[INFO]
[INFO] --- maven-archetype-plugin:2.4:generate (default-cli) @ standalone-pom --
-
[INFO] Generating project in Batch mode
[INFO] -------------------------------------------------------------------------
---
[INFO] Using following parameters for creating project from Old (1.x) Archetype:
 maven-archetype-quickstart:1.0
[INFO] -------------------------------------------------------------------------
---
[INFO] Parameter: groupId, Value: com.companyname.bank
[INFO] Parameter: packageName, Value: com.companyname.bank
[INFO] Parameter: package, Value: com.companyname.bank
[INFO] Parameter: artifactId, Value: consumerBanking
[INFO] Parameter: basedir, Value: C:MVN
[INFO] Parameter: version, Value: 1.0-SNAPSHOT
[INFO] project created from Old (1.x) Archetype in dir: C:MVNconsumerBanking
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 03:19 min
[INFO] Finished at: 2015-09-26T12:18:26+05:30
[INFO] Final Memory: 15M/247M
[INFO] ------------------------------------------------------------------------

现在去C:/ MVN目录。您会看到一个名为consumerBanking的java应用程序项目(在artifactId中指定)。Maven使用标准目录布局,如下所示:

Java应用程序项目结构

使用上面的例子,我们可以理解以下关键概念

文件夹结构 描述
消费者银行 包含src文件夹和pom.xml
src / main / java 包含java代码文件下的包结构(com / companyName / bank)。
src / main / test 包含测试java代码文件的包结构(com / companyName / bank)。
src / main / resources 它包含图像/属性文件(在上面的例子中,我们需要手动创建这个结构)。

如果您看到,Maven还创建了一个示例Java源文件和Java测试文件。打开C: MVN consumerBanking src main java com companyname bank文件夹,你会看到App.java。

package com.companyname.bank;

/**
 * Hello world!
 *
 */
public class App 
{
    public static void main( String[] args )
    {
        System.out.println( "Hello World!" );
    }
}

打开C: MVN consumerBanking src test java com companyname bank文件夹,你会看到AppTest.java。

package com.companyname.bank;

import junit.framework.Test;
import junit.framework.TestCase;
import junit.framework.TestSuite;

/**
 * Unit test for simple App.
 */
public class AppTest extends TestCase 
{
    /**
     * Create the test case
     *
     * @param testName name of the test case
     */
    public AppTest( String testName )
    {
        super( testName );
    }

    /**
     * @return the suite of tests being tested
     */
    public static Test suite()
    {
        return new TestSuite( AppTest.class );
    }

    /**
     * Rigourous Test :-)
     */
    public void testApp()
    {
        assertTrue( true );
    }
}

开发人员需要按照上表所述放置他们的文件,并且Maven处理所有创建相关的复杂性。

在下一节中,我们将探讨如何使用maven Maven创建和测试项目来创建和测试项目。

使用Maven创建和测试Java项目

我们在“项目创建”一章中学到的是如何使用Maven创建Java应用程序。现在我们将看到如何创建和测试应用程序。

转到您创建Java应用程序的C:/ MVN目录。打开consumerBanking文件夹。您将看到包含以下内容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>com.companyname.projectgroup</groupId>
      <artifactId>project</artifactId>
      <version>1.0</version>
      <dependencies>
         <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>3.8.1</version>
         </dependency>
      </dependencies>  
</project>

在这里可以看到,Maven已经添加了Junit作为测试框架。默认情况下,Maven 在前一章探讨的默认目录结构添加了一个源文件App.java和一个测试文件AppTest.java

让我们打开命令控制台,进入C: MVN consumerBanking目录,然后执行下面的mvn命令。

C:MVNconsumerBanking>mvn clean package

Maven将开始建设项目。

[INFO] Scanning for projects...
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Building consumerBanking 1.0-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[INFO]
[INFO] --- maven-clean-plugin:2.5:clean (default-clean) @ consumerBanking ---
[INFO] Deleting C:MVNconsumerBanking	arget
[INFO]
[INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ consumerBanking ---
[WARNING] Using platform encoding (Cp1252 actually) to copy filtered resources,i.e. build is platform dependent!
[INFO] skip non existing resourceDirectory C:MVNconsumerBankingsrcmain
esources
[INFO]
[INFO] --- maven-compiler-plugin:3.1:compile (default-compile) @ consumerBanking ---
[INFO] Changes detected - recompiling the module!
[WARNING] File encoding has not been set, using platform encoding Cp1252, i.e. build is platform dependent!
[INFO] Compiling 1 source file to C:MVNconsumerBanking	argetclasses
[INFO]
[INFO] --- maven-resources-plugin:2.6:testResources (default-testResources) @ consumerBanking ---
[WARNING] Using platform encoding (Cp1252 actually) to copy filtered resources,
i.e. build is platform dependent!
[INFO] skip non existing resourceDirectory C:MVNconsumerBankingsrc	est
esources
[INFO]
[INFO] --- maven-compiler-plugin:3.1:testCompile (default-testCompile) @ consumerBanking ---
[INFO] Changes detected - recompiling the module!
[WARNING] File encoding has not been set, using platform encoding Cp1252, i.e. b
uild is platform dependent!
[INFO] Compiling 1 source file to C:MVNconsumerBanking	arget	est-classes
[INFO]
[INFO] --- maven-surefire-plugin:2.12.4:test (default-test) @ consumerBanking ---
[INFO] Surefire report directory: C:MVNconsumerBanking	argetsurefire-reports


-------------------------------------------------------
 T E S T S
-------------------------------------------------------
Running com.companyname.bank.AppTest
Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.063 sec

Results :

Tests run: 1, Failures: 0, Errors: 0, Skipped: 0

[INFO]
[INFO] --- maven-jar-plugin:2.4:jar (default-jar) @ consumerBanking ---
[INFO] Building jar: C:MVNconsumerBanking	argetconsumerBanking-1.0-SNAPSHOT.jar
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 14.406 s
[INFO] Finished at: 2015-09-27T17:58:06+05:30
[INFO] Final Memory: 14M/247M
[INFO] ------------------------------------------------------------------------

您已经创建了项目并创建了最终的jar文件,以下是关键的学习概念

现在打开命令控制台,进入C: MVN consumerBanking target classes目录并执行以下java命令。

C:MVNconsumerBanking	argetclasses>java com.companyname.bank.App

你会看到结果

Hello World!

添加Java源文件

我们来看看我们如何在我们的项目中添加额外的Java文件。打开C: MVN consumerBanking src main java com companyname bank文件夹,将Util类创建为Util.java。

package com.companyname.bank;

public class Util 
{
   public static void printMessage(String message){
	   System.out.println(message);
   }
}

更新App类以使用Util类。

package com.companyname.bank;

/**
 * Hello world!
 *
 */
public class App 
{
    public static void main( String[] args )
    {
        Util.printMessage("Hello World!");
    }
}

现在打开命令控制台,进入C: MVN consumerBanking目录,然后执行下面的mvn命令。

C:MVNconsumerBanking>mvn clean compile

Maven创建成功后,请执行以下命令:C: MVN consumerBanking target classes目录。

C:MVNconsumerBanking	argetclasses>java -cp com.companyname.bank.App

你会看到结果

Hello World!

Maven - 外部依赖关系

现在你知道Maven使用Maven Repositories的概念进行依赖管理但是如果任何远程存储库和中央存储库中的依赖关系不可用,会发生什么?Maven使用外部依赖概念为这种场景提供答案

例如,让我们对在Maven创建项目部分创建的项目进行以下更改

现在我们的项目结构应该如下所示:

外部储存库项目结构

在这里,您拥有专属于项目的库,这是非常通常的情况,它可以包含可能在任何存储库中可用的jar,可以从maven下载。如果您的代码使用Maven库,那么Maven创建将会失败,因为在编译阶段无法下载或引用该库。

为了处理这种情况,我们使用以下方式将这个外部依赖关系添加到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>com.companyname.bank</groupId>
   <artifactId>consumerBanking</artifactId>
   <packaging>jar</packaging>
   <version>1.0-SNAPSHOT</version>
   <name>consumerBanking</name>
   <url>http://maven.apache.org</url>

   <dependencies>
      <dependency>
         <groupId>junit</groupId>
         <artifactId>junit</artifactId>
         <version>3.8.1</version>
         <scope>test</scope>
      </dependency>

      <dependency>
         <groupId>ldapjdk</groupId>
         <artifactId>ldapjdk</artifactId>
         <scope>system</scope>
         <version>1.0</version>
         <systemPath>${basedir}srclibldapjdk.jar</systemPath>
      </dependency>
   </dependencies>

</project>

在上面的示例中查看依赖关系的第二个依赖元素,它清除关于外部依赖关系的以下关键概念

希望现在您清楚外部依赖关系,您将能够在Maven项目中指定外部依赖关系。

Maven - 项目文件

本教程将教你如何一次创建应用程序的文档。所以让我们开始,到你创建你的java consumerBanking应用程序的C:/ MVN 目录。打开consumerBanking文件夹并执行以下mvn命令。

C:MVN>mvn site

Maven将开始建设项目。

[INFO] Scanning for projects...
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Building consumerBanking 1.0-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[INFO]
[INFO] --- maven-site-plugin:3.3:site (default-site) @ consumerBanking ---
[WARNING] Report plugin org.apache.maven.plugins:maven-project-info-reports-plugin has an empty version.
[WARNING]
[WARNING] It is highly recommended to fix these problems because they threaten the stability of your build.
[WARNING]
[WARNING] For this reason, future Maven versions might no longer support building such malformed projects.
[INFO] configuring report plugin org.apache.maven.plugins:maven-project-info-reports-plugin:2.8.1
[INFO] Relativizing decoration links with respect to project URL: http://maven.apache.org
[INFO] Rendering site with org.apache.maven.skins:maven-default-skin:jar:1.0 skin.
[INFO] Generating "Dependencies" report    --- maven-project-info-reports-plugin:2.8.1
[INFO] Generating "Dependency Convergence" report    --- maven-project-info-reports-plugin:2.8.1
[INFO] Generating "Dependency Information" report    --- maven-project-info-reports-plugin:2.8.1
[INFO] Generating "About" report    --- maven-project-info-reports-plugin:2.8.1
[INFO] Generating "Plugin Management" report    --- maven-project-info-reports-plugin:2.8.1
[INFO] Generating "Project Plugins" report    --- maven-project-info-reports-plugin:2.8.1
[INFO] Generating "Project Summary" report    --- maven-project-info-reports-plugin:2.8.1
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 37.828 s
[INFO] Finished at: 2015-09-27T12:11:27+05:30
[INFO] Final Memory: 23M/247M
[INFO] ------------------------------------------------------------------------

而已。您的项目文档已准备就绪。Maven已经在目标目录中创建了一个站点。

文档网站页面

打开C: MVN consumerBanking target site文件夹。点击index.html查看文档。

消费者网页

Maven的使用被称为文件处理引擎创建的文档Doxia读取多个源格式转换为通用文件model.To写你的项目文档,你可以写在由Doxia解析的以下几条常用的格式内容。

格式名称描述参考
易于纯文本格式

doxia格式

XDocMaven 1.x文档格式

雅加达格式

FML用于FAQ文件

fml格式

XHTML可扩展的HTML

XHTML维基

Maven - 项目模板

Maven为用户提供了一个使用Archetype概念的不同类型的项目模板(614个数量)的非常大的列表Maven帮助用户使用以下命令快速启动一个新的Java项目

mvn archetype:generate

什么是prototype?

Archetype是一个Maven插件,其任务是根据其模板创建一个项目结构。我们将使用quickstart archetype插件在这里创建一个简单的java应用程序。

使用项目模板

让我们打开命令控制台,进入C:> MVN目录并执行下面的mvn命令

C:MVN>mvn archetype:generate 

Maven将开始处理,并将要求选择所需的prototype

[INFO] Scanning for projects...
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Building Maven Stub Project (No POM) 1
[INFO] ------------------------------------------------------------------------
[INFO]
[INFO] >>> maven-archetype-plugin:2.4:generate (default-cli) > generate-sources@ standalone-pom >>>
[INFO]
[INFO] <<< maven-archetype-plugin:2.4:generate (default-cli) < generate-sources@ standalone-pom <<<
[INFO]
[INFO] --- maven-archetype-plugin:2.4:generate (default-cli) @ standalone-pom ---
[INFO] Generating project in Interactive mode
[WARNING] No archetype found in remote catalog. Defaulting to internal catalog
[INFO] No archetype defined. Using maven-archetype-quickstart (org.apache.maven.
archetypes:maven-archetype-quickstart:1.0)
Choose archetype:
1: internal -> org.apache.maven.archetypes:maven-archetype-archetype (An archetype which contains a sample archetype.)
2: internal -> org.apache.maven.archetypes:maven-archetype-j2ee-simple (An archetype which contains a simplifed sample J2EE application.)
3: internal -> org.apache.maven.archetypes:maven-archetype-plugin (An archetypewhich contains a sample Maven plugin.)
4: internal -> org.apache.maven.archetypes:maven-archetype-plugin-site (An archetype which contains a sample Maven plugin site.
      This archetype can be layered upon an existing Maven plugin project.)
5: internal -> org.apache.maven.archetypes:maven-archetype-portlet (An archetype which contains a sample JSR-268 Portlet.)
6: internal -> org.apache.maven.archetypes:maven-archetype-profiles ()
7: internal -> org.apache.maven.archetypes:maven-archetype-quickstart (An archetype which contains a sample Maven project.)
8: internal -> org.apache.maven.archetypes:maven-archetype-site (An archetype which contains a sample Maven site which demonstrates
      some of the supported document types like APT, XDoc, and FML and demonstrates how
      to i18n your site. This archetype can be layered upon an existing Maven project.)
9: internal -> org.apache.maven.archetypes:maven-archetype-site-simple (An archetype which contains a sample Maven site.)
10: internal -> org.apache.maven.archetypes:maven-archetype-webapp (An archetype
 which contains a sample Maven Webapp project.)
Choose a number or apply filter (format: [groupId:]artifactId, case sensitive contains): 7:

按Enter键选择默认选项(7:maven-archetype-quickstart)。Maven将要求项目细节。按要求输入项目详细信息。如果提供了默认值,请按Enter键。您可以通过输入自己的值来覆盖它们。

Define value for property "groupId": : com.companyname.insurance
Define value for property "artifactId": : health
Define value for property "version": 1.0-SNAPSHOT:
Define value for property "package": com.companyname.insurance:

Maven将要求项目细节确认。按enter键或按Y

Confirm properties configuration:
groupId: com.companyname.insurance
artifactId: health
version: 1.0-SNAPSHOT
package: com.companyname.insurance
Y:

现在,Maven将开始创建项目结构,并将显示以下内容:

[INFO] -------------------------------------------------------------------------
---
[INFO] Using following parameters for creating project from Old (1.x) Archetype:
 maven-archetype-quickstart:1.1
[INFO] -------------------------------------------------------------------------
---
[INFO] Parameter: groupId, Value: com.companyname.insurance
[INFO] Parameter: packageName, Value: com.companyname.insurance
[INFO] Parameter: package, Value: com.companyname.insurance
[INFO] Parameter: artifactId, Value: health
[INFO] Parameter: basedir, Value: C:MVN
[INFO] Parameter: version, Value: 1.0-SNAPSHOT
[INFO] project created from Old (1.x) Archetype in dir: C:MVNhealth
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 02:29 min
[INFO] Finished at: 2015-09-27T12:18:02+05:30
[INFO] Final Memory: 16M/247M
[INFO] ------------------------------------------------------------------------

创建项目

现在去C:> MVN目录。您将看到一个名为health的java应用程序项目,在项目创建时被赋予为artifactIdMaven将为项目创建一个标准目录布局,如下所示:

项目结构

创建POM.xml

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/xsd/maven-4.0.0.xsd">
   <modelVersion>4.0.0</modelVersion>
   <groupId>com.companyname.insurance</groupId>
   <artifactId>health</artifactId>
   <version>1.0-SNAPSHOT</version>
   <packaging>jar</packaging>
   <name>health</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>

创建了App.java

Maven生成示例java源文件,项目的App.java如下所示:

位置:C:> MVN>健康> src> main> java> com> companyname> insurance> App.java

package com.companyname.insurance;

/**
 * Hello world!
 *
 */
public class App 
{
    public static void main( String[] args )
    {
        System.out.println( "Hello World!" );
    }
}

创建了AppTest.java

Maven生成示例java源测试文件,该项目的AppTest.java如下所示:

位置:C:> MVN>健康> src> test> java> com> companyname> insurance> AppTest.java

package com.companyname.insurance;

import junit.framework.Test;
import junit.framework.TestCase;
import junit.framework.TestSuite;

/**
 * Unit test for simple App.
 */
public class AppTest 
    extends TestCase
{
    /**
     * Create the test case
     *
     * @param testName name of the test case
     */
    public AppTest( String testName )
    {
        super( testName );
    }

    /**
     * @return the suite of tests being tested
     */
    public static Test suite()
    {
        return new TestSuite( AppTest.class );
    }

    /**
     * Rigourous Test :-)
     */
    public void testApp()
    {
        assertTrue( true );
    }
}

而已。现在你可以看到Maven的Grav。您可以使用maven中的单一命令创建任何类型的项目,并可以启动您的开发。

Maven - 快照

大型软件应用程序通常由多个模块组成,而多个团队正在使用相同应用程序的不同模块的常见情况。例如,考虑一个团队正在应用程序的前端工作(app-ui.jar:1.0),并且正在使用数据服务项目(data-service.jar:1.0)。

现在可能发生的是,数据服务团队正在迅速进行错误修复或增强,并且几乎每隔一天将库释放到远程存储库。

现在如果数据服务团队每隔一天上传一个新版本,那么会出现以下问题

为了处理这种情况,SNAPSHOT概念发挥作用。

什么是SNAPSHOT?

SNAPSHOT是一个特殊版本,表示当前的开发副本。与常规版本不同,Maven在每个创建的远程存储库中检查新的SNAPSHOT版本。

现在,数据服务团队将每次发布SNAPSHOT其更新的代码到存储库说数据服务:1.0-SNAPSHOT替换旧的SNAPSHOT jar。

快照vs版本

在版本的情况下,如果Maven一旦下载了所提到的版本,则说data-service:1.0,它永远不会尝试下载存储库中的较新版本1.0。要下载更新的代码,数据服务版本将升级到1.1。

在SNAPSHOT的情况下,Maven会自动获取最新的SNAPSHOT(数据服务:1.0-SNAPSHOT),每个应用程序团队都可以创建其项目。

app-ui pom.xml

app-ui项目正在使用1.0-SNAPSHOT的数据服务

<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>app-ui</groupId>
   <artifactId>app-ui</artifactId>
   <version>1.0</version>
   <packaging>jar</packaging>
   <name>health</name>
   <url>http://maven.apache.org</url>
   <properties>
      <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
   </properties>
   <dependencies>
      <dependency>
      <groupId>data-service</groupId>
         <artifactId>data-service</artifactId>
         <version>1.0-SNAPSHOT</version>
         <scope>test</scope>
      </dependency>
   </dependencies>
</project>

data-service pom.xml

数据服务项目正在为每一个微小的变化发布1.0-SNAPSHOT

<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>data-service</groupId>
   <artifactId>data-service</artifactId>
   <version>1.0-SNAPSHOT</version>
   <packaging>jar</packaging>
   <name>health</name>
   <url>http://maven.apache.org</url>
   <properties>
      <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
   </properties>
   </project>

虽然,在SNAPSHOT的情况下,Maven每天自动获取最新的SNAPSHOT。您可以强制maven使用-U切换到任何maven命令下载最新的快照创建。

mvn clean package -U

我们打开命令控制台,然后执行C:> MVN> app-ui目录,然后执行下面的mvn命令。

C:MVNapp-ui>mvn clean package -U

下载最新的SNAPSHOT数据服务后,Maven将开始创建该项目。

[INFO] Scanning for projects...
[INFO] -------------------------------------------------------------------
[INFO] Building consumerBanking
[INFO]    task-segment: [clean, package]
[INFO] -------------------------------------------------------------------
[INFO] Downloading data-service:1.0-SNAPSHOT
[INFO] 290K downloaded.
[INFO] [clean:clean {execution: default-clean}]
[INFO] Deleting directory C:MVNapp-ui	arget
[INFO] [resources:resources {execution: default-resources}]
[WARNING] Using platform encoding (Cp1252 actually) to copy filtered resources,
i.e. build is platform dependent!
[INFO] skip non existing resourceDirectory C:MVNapp-uisrcmain
resources
[INFO] [compiler:compile {execution: default-compile}]
[INFO] Compiling 1 source file to C:MVNapp-ui	argetclasses
[INFO] [resources:testResources {execution: default-testResources}]
[WARNING] Using platform encoding (Cp1252 actually) to copy filtered resources,
i.e. build is platform dependent!
[INFO] skip non existing resourceDirectory C:MVNapp-uisrc	est
resources
[INFO] [compiler:testCompile {execution: default-testCompile}]
[INFO] Compiling 1 source file to C:MVNapp-ui	arget	est-classes
[INFO] [surefire:test {execution: default-test}]
[INFO] Surefire report directory: C:MVNapp-ui	arget
surefire-reports
-------------------------------------------------------
 T E S T S
-------------------------------------------------------
Running com.companyname.bank.AppTest
Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.027 sec

Results :

Tests run: 1, Failures: 0, Errors: 0, Skipped: 0

[INFO] [jar:jar {execution: default-jar}]
[INFO] Building jar: C:MVNapp-ui	arget
app-ui-1.0-SNAPSHOT.jar
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESSFUL
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 2 seconds
[INFO] Finished at: 2015-09-27T12:30:02+05:30
[INFO] Final Memory: 16M/89M
[INFO] ------------------------------------------------------------------------

Maven - 创建自动化

创建自动化定义了一旦项目创建成功完成后依赖项目创建过程开始的场景,以确保依赖项目是稳定的。

示例

考虑一个团队正在开发一个项目bus_core_api,其中另外两个项目app_web_ui和app_desktop_ui依赖。bus_core_api项目存在于C:> MVN目录中,app_web_ui和app_desktop_ui存在于C:> MVN> projects目录中

app_web_ui项目正在使用bus_core_api项目的1.0-SNAPSHOT

<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>app_web_ui</groupId>
   <artifactId>app_web_ui</artifactId>
   <version>1.0</version>
   <packaging>jar</packaging>
   <name>app_web_ui</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>
	  <dependency>
         <groupId>bus_core_api</groupId>
         <artifactId>bus_core_api</artifactId>
         <version>1.0-SNAPSHOT</version>
		 <scope>system</scope>
		 <systemPath>C:MVNus_core_api	argetus_core_api-1.0-SNAPSHOT.jar</systemPath>
      </dependency>
   </dependencies>
</project>

app_desktop_ui项目正在使用bus_core_api项目的1.0-SNAPSHOT

<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>app_desktop_ui</groupId>
   <artifactId>app_desktop_ui</artifactId>
   <version>1.0</version>
   <packaging>jar</packaging>
   <name>app_desktop_ui</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>
	  <dependency>
         <groupId>bus_core_api</groupId>
         <artifactId>bus_core_api</artifactId>
         <version>1.0-SNAPSHOT</version>
		 <scope>system</scope>
		 <systemPath>C:MVNus_core_api	argetus_core_api-1.0-SNAPSHOT.jar</systemPath>
      </dependency>
   </dependencies>
</project>

bus_core_api项目

<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>bus_core_api</groupId>
   <artifactId>bus_core_api</artifactId>
   <version>1.0-SNAPSHOT</version>
   <packaging>jar</packaging>   
</project>

现在,app_web_ui和app_desktop_ui项目的团队需要在bus_core_api项目更改时,其创建过程应该启动。

使用快照可以确保使用最新的bus_core_api项目,但是要满足上述要求,我们需要做一些额外的事情。

我们有两种方法

使用Maven

更新bus_core_api项目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>bus_core_api</groupId>
   <artifactId>bus_core_api</artifactId>
   <packaging>jar</packaging>
   <version>1.0-SNAPSHOT</version>
   <build>
      <plugins>
         <plugin>            
            <artifactId>maven-invoker-plugin</artifactId>
            <version>2.0.0</version>
            <configuration>
               <debug>true</debug>		
			   <cloneProjectsTo>${project.build.directory}/it</cloneProjectsTo>			   
	           <projectsDirectory>C:/MVN/projects</projectsDirectory>			   
            </configuration>			
            <executions>
               <execution>
                  <id>integration-test</id>
                  <goals>
                     <goal>run</goal>
                  </goals>
               </execution>
            </executions>
         </plugin>
      </plugins>
   </build>
   <dependencies>
      <dependency>
         <groupId>junit</groupId>
         <artifactId>junit</artifactId>
         <version>3.8.1</version>
         <scope>test</scope>
      </dependency>     
   </dependencies>
</project>

我们打开命令控制台,然后打开C:> MVN> bus_core_api目录,然后执行下面的mvn命令。

C:MVNus_core_api>mvn verify

Maven将开始创建项目bus_core_api。

[INFO] Scanning for projects...
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Building bus_core_api 1.0-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[INFO]
[INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ bus_core_api ---
[WARNING] Using platform encoding (Cp1252 actually) to copy filtered resources,i.e. build is platform dependent!
[INFO] skip non existing resourceDirectory C:MVNus_core_apisrcmain
esources
[INFO]
[INFO] --- maven-compiler-plugin:3.1:compile (default-compile) @ bus_core_api ---
[INFO] Nothing to compile - all classes are up to date
[INFO]
[INFO] --- maven-resources-plugin:2.6:testResources (default-testResources) @ bus_core_api ---
[WARNING] Using platform encoding (Cp1252 actually) to copy filtered resources,i.e. build is platform dependent!
[INFO] skip non existing resourceDirectory C:MVNus_core_apisrc	est
esources
[INFO]
[INFO] --- maven-compiler-plugin:3.1:testCompile (default-testCompile) @ bus_core_api ---
[INFO] Nothing to compile - all classes are up to date
[INFO]
[INFO] --- maven-surefire-plugin:2.12.4:test (default-test) @ bus_core_api ---
[INFO] Surefire report directory: C:MVNus_core_api	argetsurefire-reports

-------------------------------------------------------
 T E S T S
-------------------------------------------------------
Running bus_core_api.AppTest
Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.047 sec

Results :

Tests run: 1, Failures: 0, Errors: 0, Skipped: 0

[INFO]
[INFO] --- maven-jar-plugin:2.4:jar (default-jar) @ bus_core_api ---
[INFO]
[INFO] --- maven-invoker-plugin:2.0.0:run (integration-test) @ bus_core_api ---
[WARNING] File encoding has not been set, using platform encoding Cp1252, i.e. build is platform dependent!
[INFO] Building: app_desktop_uipom.xml
[INFO] ..SUCCESS (10.7 s)
[INFO] Building: app_web_uipom.xml
[INFO] ..SUCCESS (11.5 s)
[INFO] Building: bus_core_apipom.xml
[INFO] ..SUCCESS (12.8 s)
[INFO] -------------------------------------------------
[INFO] Build Summary:
[INFO]   Passed: 3, Failed: 0, Errors: 0, Skipped: 0
[INFO] -------------------------------------------------
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 42.421 s
[INFO] Finished at: 2015-09-27T17:41:42+05:30
[INFO] Final Memory: 12M/247M
[INFO] ------------------------------------------------------------------------

使用持续集成服务与Maven

使用CI服务器是更可取的,因为开发人员不需要每次新的项目更新bus_core_api项目pom,例如app-mobile-ui作为bus_core_api项目上的依赖项目添加。Hudson使用Maven依赖关系管理自动管理创建自动化。

自动创建

哈德森认为每一个项目的建设都是工作。一旦将项目代码签入SVN(或映射到Hudson的任何源代码管理工具),Hudson将启动其创建作业,一旦完成此作业,它将自动启动其他从属作业(其他相关项目)。

在上面的例子中,当在SVN中更新bus-core-ui源代码时,Hudson开始创建。一旦创建成功。Hudson自动查找依赖项目,并开始创建app_web_ui和app_desktop_ui项目。

Maven - 部署自动化

在项目开发中,通常部署过程由以下步骤组成

问题陈述

上述部署过程中通常有多个人参与。一个团队可以处理代码的签入,其他的可以处理创建等等。由于涉及手工和多团队环境,任何步骤很可能会被错过。例如,旧版本可能无法在网络机器上替换,部署团队再次部署旧版本。

通过组合自动部署过程

更新项目POM.xml

我们将使用Maven Release插件来创建一个自动发布过程。

例如:bus-core-api项目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>bus-core-api</groupId>
   <artifactId>bus-core-api</artifactId>
   <version>1.0-SNAPSHOT</version>
   <packaging>jar</packaging> 
   <scm>
      <url>http://www.svn.com</url>
      <connection>scm:svn:http://localhost:8080/svn/jrepo/trunk/
      Framework</connection>
      <developerConnection>scm:svn:${username}/${password}@localhost:8080:
      common_core_api:1101:code</developerConnection>
   </scm>
   <distributionManagement>
      <repository>
         <id>Core-API-Java-Release</id>
         <name>Release repository</name>
         <url>http://localhost:8081/nexus/content/repositories/
         Core-Api-Release</url>
      </repository>
   </distributionManagement>
   <build>
      <plugins>
         <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-release-plugin</artifactId>
            <version>2.0-beta-9</version>
            <configuration>
               <useReleaseProfile>false</useReleaseProfile>
               <goals>deploy</goals>
               <scmCommentPrefix>[bus-core-api-release-checkin]-<
               /scmCommentPrefix>
            </configuration>
         </plugin>
      </plugins>
   </build>
</project>

在Pom.xml中,以下是我们使用的重要元素

元件 描述
SCM 配置SVN位置,从那里Maven将检出源代码。
存储库 创建WAR / EAR / JAR或任何其他工件将在代码创建成功后存储的位置。
插入 maven-release-plugin配置为自动执行部署过程。

Maven版本插件

Maven使用maven-release-plugin执行以下有用的任务

mvn release:clean

它会清除工作区,以防上次发布过程失败。

mvn release:rollback

回滚对工作区代码和配置的更改,以防上次发布过程失败。

mvn release:prepare

执行多个操作

mvn release:perform

使用先前定义的标签检查代码,并运行Maven部署目标,以将war或创建的artifact部署到存储库。

让我们打开命令控制台,去C:> MVN> bus-core-api目录,然后执行下面的mvn命令。

C:MVNus-core-api>mvn release:prepare

Maven将开始建设项目。一旦创建成功,运行以下mvn命令。

C:MVNus-core-api>mvn release:perform

一旦创建成功,您可以验证存储库中上传的JAR文件。

Maven - Web应用程序

本教程将教您如何使用版本控制系统Maven管理基于Web的项目在这里,您将学习如何创建/创建/部署和运行Web应用程序:

创建Web应用程序

要创建一个简单的java Web应用程序,我们将使用maven-archetype-webapp插件。所以让我们打开命令控制台,去C: MVN目录并执行下面的mvn命令。

C:MVN>mvn archetype:generate 
-DgroupId=com.companyname.automobile 
-DartifactId=trucks
-DarchetypeArtifactId=maven-archetype-webapp 
-DinteractiveMode=false

Maven将开始处理,并将创建完整的基于Web的Java应用程序项目结构。

[INFO] Scanning for projects...
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Building Maven Stub Project (No POM) 1
[INFO] ------------------------------------------------------------------------
[INFO]
[INFO] >>> maven-archetype-plugin:2.4:generate (default-cli) > generate-sources
@ standalone-pom >>>
[INFO]
[INFO] <<< maven-archetype-plugin:2.4:generate (default-cli) < generate-sources
@ standalone-pom <<<
[INFO]
[INFO] --- maven-archetype-plugin:2.4:generate (default-cli) @ standalone-pom --
-
[INFO] Generating project in Batch mode
[WARNING] No archetype found in remote catalog. Defaulting to internal catalog
[INFO] -------------------------------------------------------------------------
---
[INFO] Using following parameters for creating project from Old (1.x) Archetype:
 maven-archetype-webapp:1.0
[INFO] -------------------------------------------------------------------------
---
[INFO] Parameter: groupId, Value: com.companyname.automobile
[INFO] Parameter: packageName, Value: com.companyname.automobile
[INFO] Parameter: package, Value: com.companyname.automobile
[INFO] Parameter: artifactId, Value: trucks
[INFO] Parameter: basedir, Value: C:MVN
[INFO] Parameter: version, Value: 1.0-SNAPSHOT
[INFO] project created from Old (1.x) Archetype in dir: C:MVN	rucks
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 19.016 s
[INFO] Finished at: 2015-09-27T17:47:56+05:30
[INFO] Final Memory: 16M/247M
[INFO] ------------------------------------------------------------------------

现在去C:/ MVN目录。您将看到一个名为卡车的java应用程序项目(在artifactId中指定)。

Java Web应用程序项目结构

Maven使用标准目录布局。使用上面的例子,我们可以理解以下关键概念

文件夹结构 描述
卡车 包含src文件夹和pom.xml
src / main / webapp 包含index.jsp和WEB-INF文件夹。
src / main / webapp / WEB-INF 包含web.xml
src / main / resources 它包含图像/属性文件。

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>com.companyname.automobile</groupId>
   <artifactId>trucks</artifactId>
   <packaging>war</packaging>
   <version>1.0-SNAPSHOT</version>
   <name>trucks 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>trucks</finalName>
   </build>
</project>

如果您看到,Maven还创建了一个示例JSP源文件

打开 C:> MVN>卡车> src> main> webapp>文件夹,你会看到index.jsp。

<html>
   <body>
      <h2>Hello World!</h2>
   </body>
</html>

创建Web应用程序

我们打开命令控制台,执行C: MVN trucks目录,然后执行下面的mvn命令。

C:MVN	rucks>mvn clean package

Maven将开始建设项目。

[INFO] Scanning for projects...
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Building trucks Maven Webapp 1.0-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[INFO]
[INFO] --- maven-clean-plugin:2.5:clean (default-clean) @ trucks ---
[INFO] Deleting C:MVN	rucks	arget
[INFO]
[INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ trucks ---

[WARNING] Using platform encoding (Cp1252 actually) to copy filtered resources,
i.e. build is platform dependent!
[INFO] Copying 0 resource
[INFO]
[INFO] --- maven-compiler-plugin:3.1:compile (default-compile) @ trucks ---
[INFO] No sources to compile
[INFO]
[INFO] --- maven-resources-plugin:2.6:testResources (default-testResources) @ tr
ucks ---
[WARNING] Using platform encoding (Cp1252 actually) to copy filtered resources,
i.e. build is platform dependent!
[INFO] skip non existing resourceDirectory C:MVN	ruckssrc	est
esources
[INFO]
[INFO] --- maven-compiler-plugin:3.1:testCompile (default-testCompile) @ trucks
---
[INFO] No sources to compile
[INFO]
[INFO] --- maven-surefire-plugin:2.12.4:test (default-test) @ trucks ---
[INFO] No tests to run.
[INFO]
[INFO] --- maven-war-plugin:2.2:war (default-war) @ trucks ---
[INFO] Packaging webapp
[INFO] Assembling webapp [trucks] in [C:MVN	rucks	arget	rucks]
[INFO] Processing war project
[INFO] Copying webapp resources [C:MVN	ruckssrcmainwebapp]
[INFO] Webapp assembled in [93 msecs]
[INFO] Building war: C:MVN	rucks	arget	rucks.war
[INFO] WEB-INFweb.xml already added, skipping
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 4.766 s
[INFO] Finished at: 2015-09-27T17:53:05+05:30
[INFO] Final Memory: 11M/247M
[INFO] ------------------------------------------------------------------------

部署Web应用程序

现在,复制trucks.war中创建C:> MVN>货车>目标>文件夹到你的Web服务器的webapps目录下,并重新启动Web服务器。

测试Web应用程序

使用URL运行Web应用程序:http:// <server-name>:<port-number> /trucks/index.jsp

验证输出。

网页

Maven - Eclipse IDE

Eclipse提供了一个优秀的插件m2eclipse,它将Maven和Eclipse无缝集成在一起。

下面列出了一些m2eclipse的特性

安装m2eclipse插件

使用以下链接之一来安装m2eclipse:

网址
Eclipse 3.5(Gallileo)

在Eclipse 3.5(Gallileo)中安装m2eclipse

Eclipse 3.6(Helios)

在Eclipse 3.6(Helios)中安装m2eclipse

以下示例将帮助您充分利用集成Eclipse和maven的优势。

在Eclipse中导入一个maven项目

在Eclipse中导入一个maven项目。 在Eclipse中导入一个maven项目。

现在,您可以在eclipse中看到maven项目。

Eclipse中的maven项目。

现在,看看consumerBanking的项目属性。你可以看到,Eclipse已经将Maven依赖项添加到了java创建路径中。

具有Maven依赖关系的Java创建路径。

现在,它使用eclipse的maven功能来创建这个项目。

Maven将开始建设项目。您可以在Eclipse控制台中看到输出

[INFO] Scanning for projects...
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Building consumerBanking 1.0-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[INFO]
[INFO] --- maven-clean-plugin:2.5:clean (default-clean) @ consumerBanking ---
[INFO] Deleting C:MVNconsumerBanking	arget
[INFO]
[INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ consumerBanking ---
[WARNING] Using platform encoding (Cp1252 actually) to copy filtered resources,i.e. build is platform dependent!
[INFO] skip non existing resourceDirectory C:MVNconsumerBankingsrcmain
esources
[INFO]
[INFO] --- maven-compiler-plugin:3.1:compile (default-compile) @ consumerBanking ---
[INFO] Changes detected - recompiling the module!
[WARNING] File encoding has not been set, using platform encoding Cp1252, i.e. build is platform dependent!
[INFO] Compiling 1 source file to C:MVNconsumerBanking	argetclasses
[INFO]
[INFO] --- maven-resources-plugin:2.6:testResources (default-testResources) @ consumerBanking ---
[WARNING] Using platform encoding (Cp1252 actually) to copy filtered resources,
i.e. build is platform dependent!
[INFO] skip non existing resourceDirectory C:MVNconsumerBankingsrc	est
esources
[INFO]
[INFO] --- maven-compiler-plugin:3.1:testCompile (default-testCompile) @ consumerBanking ---
[INFO] Changes detected - recompiling the module!
[WARNING] File encoding has not been set, using platform encoding Cp1252, i.e. b
uild is platform dependent!
[INFO] Compiling 1 source file to C:MVNconsumerBanking	arget	est-classes
[INFO]
[INFO] --- maven-surefire-plugin:2.12.4:test (default-test) @ consumerBanking ---
[INFO] Surefire report directory: C:MVNconsumerBanking	argetsurefire-reports


-------------------------------------------------------
 T E S T S
-------------------------------------------------------
Running com.companyname.bank.AppTest
Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.063 sec

Results :

Tests run: 1, Failures: 0, Errors: 0, Skipped: 0

[INFO]
[INFO] --- maven-jar-plugin:2.4:jar (default-jar) @ consumerBanking ---
[INFO] Building jar: C:MVNconsumerBanking	argetconsumerBanking-1.0-SNAPSHOT.jar
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 14.406 s
[INFO] Finished at: 2015-09-27T17:58:06+05:30
[INFO] Final Memory: 14M/247M
[INFO] ------------------------------------------------------------------------
使用run as选项运行maven命令。

现在,右键单击App.java。选择运行方式选项。选择作为Java应用程序。

你会看到结果

Hello World!

Maven - NetBeans

NetBeans 6.7和更新版本对Maven具有内置支持。在以前的版本中,Maven插件在插件管理器中可用。在这个例子中我们使用的是NetBeans 6.9。

下面列出了NetBeans的一些功能

以下示例将帮助您充分利用集成NetBeans和Maven的优势。

在NetBeans中打开一个maven项目

在NetBeans中打开一个Maven项目。

现在,您可以在NetBeans中看到maven项目。查看consumerBanking项目库和测试库。您可以看到NetBeans已将Maven依赖项添加到其创建路径。

NetBeans中的Maven项目。

在NetBeans中创建一个maven项目

现在,它使用NetBeans的maven功能创建此项目。

在NetBeans中创建Maven项目。

Maven将开始建设项目。您可以在NetBeans控制台中看到输出

NetBeans: Executing "mvn.bat -Dnetbeans.execution=true clean install"
NetBeans:      JAVA_HOME=C:Program FilesJavajdk1.6.0_21
Scanning for projects...
------------------------------------------------------------------------
Building consumerBanking
   task-segment: [clean, install]
------------------------------------------------------------------------
[clean:clean]
[resources:resources]
[WARNING] Using platform encoding (Cp1252 actually)
to copy filtered resources, i.e. build is platform dependent!
skip non existing resourceDirectory C:MVNconsumerBankingsrcmain
esources
[compiler:compile]
Compiling 2 source files to C:MVNconsumerBanking	argetclasses
[resources:testResources]
[WARNING] Using platform encoding (Cp1252 actually)
to copy filtered resources, i.e. build is platform dependent!
skip non existing resourceDirectory C:MVNconsumerBankingsrc	est
esources
[compiler:testCompile]
Compiling 1 source file to C:MVNconsumerBanking	arget	est-classes
[surefire:test]
Surefire report directory: C:MVNconsumerBanking	argetsurefire-reports

-------------------------------------------------------
 T E S T S
-------------------------------------------------------
Running com.companyname.bank.AppTest
Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.023 sec

Results :

Tests run: 1, Failures: 0, Errors: 0, Skipped: 0

[jar:jar]
Building jar: C:MVNconsumerBanking	argetconsumerBanking-1.0-SNAPSHOT.jar
[install:install]
Installing C:MVNconsumerBanking	argetconsumerBanking-1.0-SNAPSHOT.jar
to C:UsersGB3824.m2
epositorycomcompanynameankconsumerBanking
1.0-SNAPSHOTconsumerBanking-1.0-SNAPSHOT.jar
------------------------------------------------------------------------
BUILD SUCCESSFUL
------------------------------------------------------------------------
Total time: 9 seconds
Finished at: Thu Jul 19 12:57:28 IST 2012
Final Memory: 16M/85M
------------------------------------------------------------------------

在NetBeans中运行应用程序

现在,右键单击App.java。选择运行文件为选项。您将在NetBeans控制台中看到结果。

NetBeans: Executing "mvn.bat -Dexec.classpathScope=runtime 
-Dexec.args=-classpath %classpath com.companyname.bank.App 
-Dexec.executable=C:Program FilesJavajdk1.6.0_21injava.exe 
-Dnetbeans.execution=true process-classes 
org.codehaus.mojo:exec-maven-plugin:1.1.1:exec"
NetBeans:      JAVA_HOME=C:Program FilesJavajdk1.6.0_21
Scanning for projects...
------------------------------------------------------------------------
Building consumerBanking
   task-segment: [process-classes, 
   org.codehaus.mojo:exec-maven-plugin:1.1.1:exec]
------------------------------------------------------------------------
[resources:resources]
[WARNING] Using platform encoding (Cp1252 actually) 
to copy filtered resources, i.e. build is platform dependent!
skip non existing resourceDirectory C:MVNconsumerBankingsrcmain
esources
[compiler:compile]
Nothing to compile - all classes are up to date
[exec:exec]
Hello World!
------------------------------------------------------------------------
BUILD SUCCESSFUL
------------------------------------------------------------------------
Total time: 1 second
Finished at: Thu Jul 19 14:18:13 IST 2012
Final Memory: 7M/64M
------------------------------------------------------------------------

Maven - IntelliJ IDEA IDE集成

IntelliJ IDEA对Maven有内置支持。在这个例子中,我们使用了IntelliJ IDEA社区版本11.1。

IntelliJ IDEA的一些功能如下所列

以下示例将帮助您充分利用集成IntelliJ IDEA和Maven的优势。

在IntelliJ IDEA中创建一个新项目

我们将使用新建项目向导导入Maven项目。

IntelliJ IDEA的新项目,第1步。 IntelliJ IDEA的新项目,第2步。 IntelliJ IDEA的新项目,第3步。 IntelliJ IDEA的新项目,第4步。 IntelliJ IDEA的新项目,第5步。

现在,您可以在IntelliJ IDEA中看到maven项目。查看consumerBanking项目外部库。您可以看到IntelliJ IDEA已将Maven依赖项添加到Maven部分下的创建路径。

IntelliJ IDEA中的Maven项目。

在IntelliJ IDEA中创建一个maven项目

现在,它使用IntelliJ IDEA的能力创建这个项目的时间。

您可以在IntelliJ IDEA控制台中看到输出

4:01:56 PM Compilation completed successfully

在IntelliJ IDEA中运行应用程序

IntelliJ IDEA中的Maven项目。

您将在IntelliJ IDEA控制台中看到结果。

"C:Program FilesJavajdk1.6.0_21injava"
-Didea.launcher.port=7533 
"-Didea.launcher.bin.path=
C:Program FilesJetBrainsIntelliJ IDEA Community Edition 11.1.2in"
-Dfile.encoding=UTF-8 
-classpath "C:Program FilesJavajdk1.6.0_21jrelibcharsets.jar;
C:Program FilesJavajdk1.6.0_21jrelibdeploy.jar;
C:Program FilesJavajdk1.6.0_21jrelibjavaws.jar;
C:Program FilesJavajdk1.6.0_21jrelibjce.jar;
C:Program FilesJavajdk1.6.0_21jrelibjsse.jar;
C:Program FilesJavajdk1.6.0_21jrelibmanagement-agent.jar;
C:Program FilesJavajdk1.6.0_21jrelibplugin.jar;
C:Program FilesJavajdk1.6.0_21jrelib
esources.jar;
C:Program FilesJavajdk1.6.0_21jrelib
t.jar;
C:Program FilesJavajdk1.6.0_21jrelibextdnsns.jar;
C:Program FilesJavajdk1.6.0_21jrelibextlocaledata.jar;
C:Program FilesJavajdk1.6.0_21jrelibextsunjce_provider.jar;
C:Program FilesJavajdk1.6.0_21jrelibextsunmscapi.jar;
C:Program FilesJavajdk1.6.0_21jrelibextsunpkcs11.jar
C:MVNconsumerBanking	argetclasses;
C:Program FilesJetBrains
IntelliJ IDEA Community Edition 11.1.2libidea_rt.jar" 
com.intellij.rt.execution.application.AppMain com.companyname.bank.App
Hello World!
Process finished with exit code 0