Maven快速入门及应用

3 篇文章 0 订阅

Apache Maven [‘meɪv(ə)n] 是一个软件项目管理和综合工具。基于项目对象模型(POM,Project Object Model)的概念,Maven可以从一个中心资料片管理项目构建,报告和文件。

1 安装

  • Maven官方网站下载 Maven 的 zip 文件,如: apache-maven-3.3.3-bin.zip,解压。
  • 添加环境变量M2_HOMEMAVEN_HOME,并追加到环境变量 PATH 中。

2 配置

2.1 Maven settings.xml

  当Maven运行过程中的各种配置,例如pom.xml,不想绑定到一个固定的project或者要分配给用户时,我们使用settings.xml中的settings元素来确定这些配置。这包含了本地仓库位置,远程仓库服务器以及认证信息等。
  settings.xml存在于两个地方:

1.安装的地方:$M2_HOME/conf/settings.xml

2.用户的目录:${user.home}/.m2/settings.xml

  前者又被叫做全局配置,后者被称为用户配置。如果两者都存在,它们的内容将被合并,并且用户范围的settings.xml优先

2.2 profile介绍

    profile可以让我们定义一系列的配置信息,然后指定其激活条件。这样我们就可以定义多个profile,然后每个profile对应不同的激活条件和配置信息,从而达到不同环境使用不同配置信息的效果。

  profile定义在pom.xml中。
  Maven操作时,可以使用-P参数显式地指定当前激活哪一个profile。如

# 激活 develop profile
$ mvn package -P develop

# 查看当前牌激活状态的profile
$ mvn help:active-profiles

  查看当前处于激活状态的profile

$ mvn help:active-profiles

3 中央存储库

  Maven默认一个中央存储库:http://repo1.maven.org/maven2/

3.1 依赖库查询顺序:

  Maven的依赖库查询顺序为

  1. 在 Maven 本地资源库中搜索,如果没有找到,进入第 2 步,否则退出。
  2. 在 Maven 中央存储库搜索,如果没有找到,进入第 3 步,否则退出。
  3. 在 Maven 的远程存储库搜索,如果没有找到,提示错误信息,否则退出。
3.2 自定义的jar安装到本地资源库

  例如,文件kaptcha-version.jar在C盘。则发出命令如下:

mvn install:install-file -Dfile=c:\kaptcha-{version}.jar -DgroupId=biz.superalloy -DartifactId=leonProfile -Dversion={version} -Dpackaging=jar

  命令执行完成后,kaptcha-version.jar将被复制到Maven本地资源库。
安装完毕后,就在pom.xml中声明kaptcha的坐标

<dependency>
    <groupId>biz.superalloy</groupId>
    <artifactId>kaptcha</artifactId>
    <version>2.3</version>
<dependency>

4 使用Maven创建Java项目

4.1 创建项目
mvn archetype:generate -DgroupId=biz.superalloy -DartifactId=myMvnProject -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false

   archetype:generate用来生成项目结构

FirstMvnProject
   |-src
   |---main
   |-----java
   |-------biz
   |---------superalloy   
   |-----------App.java
   |---test|-----java
   |-------biz
   |---------supealloy
   |-----------AppTest.java
   |-pom.xml
4.2 生成Eclipse项目

  终端进入FirstMvnProject,键入以下命令使其成为一个Eclipse项目。

mvn eclipse:eclipse

   以上命令会自动下载更新相关资源和配置信息(读取pom.xml文件),并产生 Eclipse IDE所要求的所有项目文件。

4.3 Maven打包
mvn package

  命令会编译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>

  <!-- Maven 坐标 -->
  <groupId>biz.superalloy</groupId>
  <artifactId>FirstMvnProject</artifactId>  
  <version>1.0-SNAPSHOT</version>

  <!-- 包元素定义打包时(mvn package)输出jar文件 -->
  <packaging>jar</packaging>

  <name>FirstMvnProject</name>
  <url>http://maven.apache.org</url>

  <!-- 依赖 -->
  <dependencies>

    <!-- 坐标从中心仓库查 -->
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.11</version>
      <scope>test</scope>
    </dependency>

  </dependencies>
</project>

5 使用Maven创建Web项目

5.1. 命令
mvn archetype:generate -DgroupId=biz.superalloy -DartifactId=FirstWebApp -DarchetypeArtifactId=maven-archetype-webapp -DinteractiveMode=false
5.2. Eclipse IDE支持

  终端进入FirstWebApp,以下命令将项目转化为Eclipse项目,-Dwtpversion=2.0生成Wtp插件的Web项目

mvn eclipse:eclipse -Dwtpversion=2.0

注意,为方便起见,声明 maven-eclipse-plugin,并配置wtpversion 来避免输入参数 -Dwtpversion=2.0。现在,每次使用 mvn eclipse:eclipse,Maven将这个项目导入转换为 Eclipse Web 项目。

之前:
mvn eclipse:eclipse –> Eclipse Java project (JAR)
mvn eclipse:eclipse -Dwtpversion=2.0 –> Eclipse Java web project (WAR)
之后:
mvn eclipse:eclipse –> Eclipse Java web project (WAR)

6 Maven POM

  POM代表项目对象模型(Project Object Model)。它是工作在Maven中的基本单位。这是一个XML文件。它始终保存在该项目基本目录中的pom.xml文件。
   创建一个POM之前,我们应该先决定项目组(groupId),它的名字(artifactId)和版本(version),因为这些属性在项目仓库是唯一标识的。
  例:

<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>biz.superalloy</groupId>
    <artifactId>FirstWebApp</artifactId>    
    <version>1.0-SNAPSHOT</version>

    <packaging>war</packaging>

    <name>FirstWebApp</name>
    <url>http://www.superalloy.biz</url> 

</project>

  应当指出,每个项目应该有一个单一的POM文件

  • 所有的POM文件要项目元素必须三个必填字段:groupId, artifactId, version
  • 在库中的项目符号是:groupId:artifactId:version
  • pom.xml的根元素是project,它有三个主要的子节点:
节点描述
groupIdThis is an Id of project’s group.This is generally unique amongst an organization or a project. For example, a banking group com.company.bank has all bank related projects.
artifactIdThis is an Id of the project. This is generally name of the project. For example, consumer-banking. Along with the groupId, the artifactId defines the artifact’s location within the repository.
versionThis is the version of the project. Along with the groupId, It is used within an artifact’s repository to separate versions from each other. For example: com.company.bank:consumer-banking:1.0 com.company.bank:consumer-banking:1.1.
6.1 超级POM

  所有的POM继承自父类(尽管明确界定)。这个基础的POM被称为超级POM(superpom),并包含继承默认值。
通过以下命令显示**有效的**effective-pom。

mvn help:effective-pom

  Maven3的超级POM位置
  ${M2_HOME}/lib/maven-model-builder-version.jar,打开该文件,能找到超级POM:\org\apache\maven\model\pom-4.0.0.xml,它是所有Maven POM的父POM,所有Maven项目继承该配置。

7 Maven Web应用

7.1 创建

  使用Maven原型-web应用插件。

mvn archetype:generate -DgroupId=biz.superalloy -DartifactId=MyWebApp -DarchetypeArtifactId=maven-archetype-webapp -DinteractiveMode=false

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

7.2 清空、编译、打包、安装到本地库

  进入MyWebApp目录,执行下面命令

mvn clean install

   Maven将开始建设项目。以上命令实际先后执行了四个命令。

mvn clean
mvn compile
mvn package
mvn install

  Maven项目,在pom.xml中添加依赖后,需要更新依赖包才能引用

# -e 详细异常, -U 强制更新
mvn clean install -e -U

  查看依赖树

mvn dependency:tree
7.3 部署Web应用程序

   复制创建的MyWebApp.war到web服务器(如tomcat)的webapp目录下,然后重新启动Web服务器。

7.4 测试Web应用程序

   使用URL运行Web应用程序:http://localhost:8080/MyWebApp/index.jsp (htt://:/MyWebApp/index.jsp)验证输出。

8. Eclipse集成Maven

  Eclispe提供了一个插件m2eclipse无缝将Maven和Eclipse集成在一起。

8.1 Eclipse版本Luna Service Release 2 (4.4.2)和Mars.2 Release (4.5.2)都自动集成了m2eclipse插件。

从Help -> Install New Software -> already installed弹窗中可以看到Installled Software。

8.2 较低版本的Eclipse需要手动安装m2e插件

  eclipse安装插件的方法为:

Help -> Install New Software弹窗
  在弹窗的Work with:中键入“Available Software Sites”,键入Site后,下面会自动扫描中可用的插件,选择想要的进行安装。
  可用站点(Available Software)可以从Windows -> Preferences -> Install/Update -> Available Software中添加更多的可用站点。要注意站点上的插件与eclipse版本的兼容性。

  关于eclipse,可以从http://www.eclipse.org/downloads/packages/下载不同版本的包,目前已测试确认,Neon版本需要JDK8支持,Luna和Mars可以使用JDK7.

8.3 Eclipse集成Maven成功后的表现

 1.可以新建和导入maven项目;
 2.右击maven项目 -> properties -> Java Build Path -> Libraries可以看到eclipse已经添加maven的依赖关系;
 3.运行Maven命令: 右击maven项目 -> Debug As -> Maven ** ,点击Maven build…在Goals中可以创建新的命令。

8.4 构建Maven 项目

File -> New -> Ohter -> Maven -> Maven Project -> Catalog:Internal, Filter:webapp, 选择maven-archetype-webapp

  右击项目 -> properites -> Project Facets可以看到项目为web2.3 java1.5 要想修改成为我们需要的版本,

通过打开
appname/.settings/org.eclipse.wst.common.project.facet.core.xml
进行

 修改前:

<?xml version="1.0" encoding="UTF-8"?>
<faceted-project>
  <fixed facet="wst.jsdt.web"/>
  <installed facet="java" version="1.5"/>
  <installed facet="jst.web" version="2.3"/>
  <installed facet="wst.jsdt.web" version="1.0"/>
</faceted-project>

 可以改为:

<?xml version="1.0" encoding="UTF-8"?>
<faceted-project>
  <runtime name="Apache Tomcat v7.0"/>
  <fixed facet="wst.jsdt.web"/>
  <fixed facet="jst.web"/>
  <fixed facet="java"/>  
  <installed facet="wst.jsdt.web" version="1.0"/>
  <installed facet="jst.web" version="3.0"/>
  <installed facet="java" version="1.7"/>
</faceted-project>

  但是这里特别要注意web版本与tomcat的兼容性,Tomcat7.0不支持Dynamic Web Module3.1,仅支持3.0及以下,3.1的war文件不能通过eclipse加载到tomcat7服务器上

9 转换基于Maven的Web应用支持Eclipse IDE 

9.1 执行命令mvn eclipse:eclipse -Dwtpversion=1.5

  一般的Java项目,使用

mvn eclipse:eclipse

  对于Web应用程序,需要额外的参数,使其支持Eclipse WTP,应该使用

mvn eclipse:eclipse -Dwtpversion=2.0

  mvn eclipse:eclipse命令会重写pom.xml
  标准Eclipse的.classpath.project 文件被创建。还有一个新的 .setting 文件夹,里面包含两个文件 org.eclipse.wst.common.componentorg.eclipse.wst.common.project.facet.core.xml,用来支持Eclipse。

org.eclipse.wst.common.component

<?xml version="1.0" encoding="UTF-8"?><project-modules id="moduleCoreId" project-version="1.5.0">
    <wb-module deploy-name="MyWebApp">
        <wb-resource deploy-path="/" source-path="/target/m2e-wtp/web-resources"/>
        <wb-resource deploy-path="/" source-path="/src/main/webapp" tag="defaultRootSource"/>
        <wb-resource deploy-path="/WEB-INF/classes" source-path="/src/main/java"/>
        <wb-resource deploy-path="/WEB-INF/classes" source-path="/src/main/resources"/>
        <property name="context-root" value="MyWebApp"/>
        <property name="java-output-path" value="/MyWebApp/target/classes"/>
    </wb-module>
</project-modules>

org.eclipse.wst.common.project.facet.core.xml

<?xml version="1.0" encoding="UTF-8"?>
<faceted-project>
  <fixed facet="wst.jsdt.web"/>
  <installed facet="java" version="1.5"/>
  <installed facet="jst.web" version="2.3"/>
  <installed facet="wst.jsdt.web" version="1.0"/>
</faceted-project>
9.2 导入到Eclipse IDE

  步骤:

File -> General -> Existing Projects into Workspace -> Select root directory框中选择根路径-> 然后在上面Projects:中会列出根路径下的所有项目 -> 勾选项目后Finish。

9.3 特别注意点
  • 上述操作顺序不能错,一个干净的Maven Web应用从远程仓库克隆到本地后,先终端切到项目根路径下执行命令mvn eclipse:eclipse -Dwtpversion=1.5,然后再进行导入,上述导入时要注意导入“Existing Projects into Workspace”,不可以是别的具体类型项目,因为后面通过编译将其确定为Web应用。
  • 命令参数-Dwtpversion可以等于1.5也可以等于2.0,决定了Eclipse WTP的版本,实践中注意版本区别和与Eclipse版本的兼容性。
  • 导入之后要使其运行,还必须有下面重要的有顺序的两步:
    • 第一先编译,右击主项目 -> Debug As -> Debug Configurations -> Maven Build 中执行 mvn clean package命令进行清除、编译、打包。
    • 第二是发布,右击server -> publish 发布之后,服务器会自动启动部署,完成后服务器关闭。
      以上正常后,就可以手动启动server运行了。

10 部署基于Maven的War文件到Tomcat

10.1 Tomcat认证

  在tomcat-users.xml中添加manager权限

%TOMCAT_PATH%/conf/tomcat-users.xml

<tomcat-users>
    <role rolename="admin-gui"/>
    <role rolename="admin-script"/>
    <role rolename="manager-gui"/>
    <role rolename="manager-script"/>
    <role rolename="manager-jmx"/>
    <role rolename="manager-status"/>
    <user username="admin" password="password" roles="manager-gui,manager-script,manager-jmx,manager-status,admin-script,admin-gui"/>
</tomcat-users>
10.2 Maven的Server配置

  在settings.xml(先读~/.m2/settings.xml)中配置server(id可以任意填写,但username和password必须tomcat-users.xml一致):

~/.m/settings.xml
%M2_HOME%/conf/settings.xml

<server>
    <id>tomcat7</id>
    <username>admin</username>
    <password>password</password>
</server>
10.3 在Web项目的pom.xml文件的节点中,添加tomcat7的maven插件

  <plugin>节点必须放在<build>

  <build>

    <plugins>
        <plugin>
            <groupId>org.apache.tomcat.maven</groupId>
            <artifactId>tomcat7-maven-plugin</artifactId>
            <version>2.2</version>
            <configuration>
                <!-- 注意此处的url -->
                <url>http://localhost:8080/manager/text</url>
                <server>tomcat7</server><!-- 此处的名字必须和setting.xml中配置的ID一致 -->
                <path>/ThirdWebApp</path><!-- 此处的名字是项目发布的工程名-->
            </configuration>
        </plugin>
    </plugins>

  </build>
10.4 发布到Tomcat命令

   以下命令用来操纵Tomcat War 文件(必须事先启动Tomcat服务器)。

mvn tomcat7:deploy
mvn tomcat7:undeploy
mvn tomcat7:redeploy

注意

  • 是mvn tomcat7:deploy,不是mvn tomcat:deploy
  • 执行以上命令时,必须先启动tomcat
  • 当执行mvn undeploy,出现:
[INFO] FAIL - Unable to delete [D:\apache-tomcat-7.0.57\webapps\ThirdWebApp]. The continued presence of this file may cause problems.

  解决如下(From stackoverflow):

This is very common in Windows environment but there is a solution :
Open context.xml from /tomcat/conf folder and modify the context to match this :

<Context antiResourceLocking="true">

11 一些Maven命令

# 下载依赖库的源码包
mvn dependency:sources

# 查看maven项目的依赖
mvn dependency:tree
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值