JavaWeb(十八)--MAVEN

本文详细介绍了Maven的安装配置、依赖管理机制、生命周期、项目创建及打包过程。涵盖依赖调停、依赖管理、依赖范围等核心概念,解析Maven如何处理直接与间接依赖,以及如何通过POM文件配置项目,实现自动化构建。
摘要由CSDN通过智能技术生成

Maven

安装:

      解压缩Maven文件夹

配置一个M2_HOME和MAVEN_HOME环境变量,指向变量的Maven的安装目录。

      配置PATH环境变量。变量添加%MAVEN_HOME%/bin。

      通过Maven文件目录下/confi/setting.xml修改本地仓库地址(localRepository标签)

      由于国内你懂的,需要配置mirrors配置国内云

 

大概流程

当你创建项目时,Maven根据配置文件pom.xml查询jar包。查询规则是:

  1. 先从你的本地库查询所需的jar包
  2. 如果差找不到,再从中央仓库下载。

2-1:pom.xml配置一个包的配置方法可以通过该网站搜索对应包的配置信息(http://search.maven.org/

  1. 当中央仓库也没有的时候,需要在pom.xml中配置,远程仓库(没有找到的那个jar的仓库)。

3-1:如下例子:

 

POM.xml文件中

<dependency>

        <groupId>org.jvnet.localizer</groupId>

        <artifactId>localizer</artifactId>

        <version>1.8</version>

</dependency>

注意:org.jvnet.localizer并不存在于中央仓库,这时我们需要制定远程仓库:

<repositories>
         <repository>
             <id>java.net</id>
             <url>https://maven.java.net/content/repositories/public/</url>
         </repository>
    </repositories>

 

 

 

MAVEN的依赖机制

     存在的原因:

           传递依赖的出现:当A依赖B,而B依赖于C,(A与C是间接依赖;A与B是直接依赖)。当然有可能会依赖出很多不必要的可选依赖。从而导致依赖项越来越多。本地仓库被挤爆了。

 

MAVEN的两把刷子(依赖机制)

那么当我们使用Maven构建项目的时候,我们只需要在POM中指定直接依赖关系。MAVEN会自动处理其他间接依赖关系。

1.依赖调停(Dependency mediation)

MAVEN会自动引入间接依赖。那么问题来了一个依赖项有多个版本。那么MAVEN如何选择呢?

      “MAVEN会选择最近的那一个“ 下面通过一个例子说明。

     

依赖关系如下:

(1)A->B->C->D 2.0

(2)A->E->D1.0

(A直接依赖B、E;E依赖D1.0,而B依赖C,C又依赖D2.0).

那么此时MAVEN如何选择

    (1)中有两层间接依赖。(2)中有一层间接依赖。此时MAVEN会选择D1.0,因为(2)比较近

 

2、依赖管理(Dependency management)

(1)依赖管理是“依赖信息”集中化处理。类似java中的子类继承父类

(2)当你有多个项目用到一些相同的依赖项目,可以将这些共同的依赖项放置到一个公共的POM.xml文件中。然后在子pom.xml中引用该公共的pom.xml文件。

参照MAVEN官方代码段

  1. 依赖范围(Dependency scope)
  1. compile 
    这个也是默认的scope。编译的时候需要什么就给你添加什么jar 

    2. provided 
    典型的就是web应用,很多jarweb 容器里面就提供了,那我们就没有必要在发布的时候包含它了。不过编译和测试的时候也还是得要,因为这时还没有容器为你提供。这种scopejar不能被传递?为什么?不同的容器有不同的内容吧。

    3. runtime 
    运行时需要,编译的时候不用。但是test的时候肯定得要,不run怎么test啊。我一时想不出什么例子。你给点? 

    4. test 
    仅仅为test的用的,你肯定一下子就能想到junit。别的不多说。 

    5. system 
    如果你有一些包你自己的系统里有,你不想让mavenrepository里面下载,你可以用这个选项。

6. import 
你知道java是不能多继承的,maven也是。如果这样,似乎不太强大,所以maven可以让你用import从别的project中导入依赖。

4、排除项依赖(Excluded Dependency)

有些包的部分功能我们是不使用的。然而,这部分功能又恰好依赖一个包,

所以我们可以排除这个包。

      例子:  第五行到第十行就是。

  1. <dependency>
  2. <groupId>group-a</groupId>
  3. <artifactId>artifact-a</artifactId>
  4. <version>1.0</version>
  5. <exclusions>
  6. <exclusion>
  7. <groupId>group-c</groupId>
  8. <artifactId>excluded-artifact</artifactId>
  9. </exclusion>
  10. </exclusions>
  11. </dependency>
  12. <dependency>

5、可选依赖(Optional dependency)

若 D是C的可选依赖,D是E的可选依赖,那么没有D的时候,C和E还是可以工作的。那么可以在C和E里面可以指定D为可选。

 

 

Maven 坐标

<dependency>

        <groupId>junit</groupId>

        <artifactId>junit</artifactId>

        <version>4.11</version>

        <scope>test</scope>

</dependency>

上面的XML代码片段被称为“Maven坐标,如果你需要 JUnit jar,你需要找出其相应的 Maven 坐标。

它适用于所有其他的依赖,如SpringHibernateApache 普通的等,只要到Maven中心储存库,并找出哪些是依赖正确的 Maven 坐标。

 

.Maven的生命周期

下面列出了default、clean和site生命周期的所有构建阶段,这些阶段按照指定的顺序执行。


clean生命周期

执行阶段

描述说明

pre-clean

在实际的项目清理之前执行所需的过程

clean

删除前一个构建生成的所有文件

post-clean

执行完成项目清理所需的过程


Default生命周期

执行阶段

描述说明

validate

验证项目是正确的,所有必要的信息都是可用的。

initialize

初始化构建状态,例如设置属性或创建目录。

generate-sources

生成包含在编译中的任何源代码。

process-sources

处理源代码,例如过滤任何值。

generate-resources

生成包含在包中的资源。

process-resources

将资源复制并处理到目标目录中,准备打包。

compile

编译项目的源代码。

process-classes

从编译后生成生成的文件,例如在Java类上执行字节码增强。

generate-test-sources

生成包含在编译中的任何测试源代码。

process-test-sources

处理测试源代码,例如过滤任何值。

generate-test-resources

为测试创建资源。

process-test-resources

将资源复制并处理到测试目标目录中。

test-compile

将测试源代码编译到测试目标目录

process-test-classes

从测试编译后post-process生成文件,例如在Java类上执行字节码增强。对于Maven 2.0.5和以上。

test

使用合适的单元测试框架运行测试。这些测试不应该要求打包或部署代码。

prepare-package

在实际包装前执行必要的准备工作。这通常会导致包的一个未打包的、经过处理的版本。(Maven 2.1及以上)

package

使用已编译的代码,并将其打包成可部署格式,例如JAR。

pre-integration-test

执行集成测试之前需要执行的操作。这可能涉及到设置所需的环境等问题。

integration-test

在需要集成测试的环境中,处理并部署包。

post-integration-test

执行集成测试后所需要的操作。这可能包括清理环境。

verify

运行任何检查以验证包是否有效,并满足质量标准。

install

将该包安装到本地存储库中,作为本地其他项目的依赖项。

deploy

在集成或发布环境中完成,将最终包复制到远程存储库中,以便与其他开发人员和项目共享。

 

Site生命周期

执行阶段

描述说明

pre-site

在实际的项目站点生成之前执行过程

site

生成项目的站点文档

post-site

执行确定站点生成的过程,并为站点部署做好准备

site-deploy

将生成的站点文档部署到指定的web服务器

 

 

 

 

Maven创建一般JAVA项目

第一步:创建一个maven项目

mvn archetype:generate -DgroupId={project-packaging} -DartifactId={project-name}-DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false

第二步:转换成eclipse项目

      mvn eclipse:eclipse

      (当修改了pom.xml时,也可再调用这个方法进行更新)

注意:可以打包成jar包

mvn package

 

Maven创建一个web项目

第一步:创建一个web项目

mvn archetype:generate -DgroupId=com.yiibai -DartifactId=CounterWebApp -DarchetypeArtifactId=maven-archetype-webapp -DinteractiveMode=false

第二步 转换为exlipse web项目

mvn eclipse:eclipse -Dwtpversion=2.0
(注意,此选项 -Dwtpversion=2.0 告诉 Maven 将项目转换到 Eclipse 的 Web 项目(WAR),而不是默认的Java项目(JAR)。)为方便起见,声明 maven-eclipse-plugin,并配置wtpversion 来避免输入参数 -Dwtpversion=2.0。现在,每次使用 mvn eclipse:eclipse,Maven将这个项目导入转换为 Eclipse Web 项目。
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">
         <dependencies.....        </dependencies>
<build><finalName>CounterWebApp</finalName>
                 <plugins>
                     <!-- Eclipse project -->
                   <plugin>
                          <groupId>org.apache.maven.plugins</groupId>
                          <artifactId>maven-eclipse-plugin</artifactId>
                          <version>2.9</version>
                          <configuration> 
                                   <downloadSources>true</downloadSources>
                                   <downloadJavadocs>false</downloadJavadocs>
                                   <!-- Avoid type mvn eclipse:eclipse -Dwtpversion=2.0 -->
                                   <wtpversion>2.0</wtpversion>
                          </configuration>
                   </plugin>
                   <!-- Set JDK Compiler Level -->
                   <plugin>
                          <groupId>org.apache.maven.plugins</groupId>
                          <artifactId>maven-compiler-plugin</artifactId>
                          <version>2.3.2</version>
                          <configuration>
                                   <source>${jdk.version}</source>
                                   <target>${jdk.version}</target>
                          </configuration>
                   </plugin>
                   <plugin>
                          <groupId>org.apache.tomcat.maven</groupId>
                          <artifactId>tomcat7-maven-plugin</artifactId>
                          <version>2.2</version>
                          <configuration>
                                   <path>/CounterWebApp</path>
                          </configuration>
                   </plugin>
                 </plugins>
         </build>
</project>

Maven模板

Maven有很多模板

通常情况下,我们只需要使用下面的两个模板:

maven-archetype-webapp – Java Web Project (WAR)

maven-archetype-quickstart – Java Project (JAR)

使用maven构造项目(package)

基于maven项目打开控制台,进入pom.xml文件所放的项目文件夹,运行

mvn package

你运行“mvn package”命令,它会编译源代码,运行单元测试和包装这取决于在pom.xml文件的“packaging”标签。 例如,

1. If “packaging” = jar, 将您的项目打包成一个“jar”文件,并把它变成你的目标文件夹。

File : pom.xml

<project...><modelVersion>4.0.0</modelVersion><groupId>com.yiibai</groupId><artifactId>Maven Example</artifactId><packaging>jar</packaging> ...

2. 如果 “packaging” = war,将您的项目打包成“war”文件,并把它变成目标文件夹。

File : pom.xml

<project...><modelVersion>4.0.0</modelVersion><groupId>com.yiibai</groupId><artifactId>Maven Example</artifactId><packaging>war</packaging> ...

使用MAVEN清理项目(clean)

在基于Maven的项目中,很多缓存输出在“target”文件夹中。如果想建立项目部署,必须确保清理所有缓存的输出,从面能够随时获得最新的部署。

要清理项目缓存的输出,发出以下命令:

mvn clean

部署进行生产
要部署您的项目进行生产,它总是建议使用 “mvn clean package“, 以确保始终获得最新的部署

Maven运行单元测试(test)

通过Maven运行单元测试,发出此命令:

mvn test
//这样会运行项目中所有的test
若要运行某一个test         
mvn -Dtest=类名 test

将项目安装到maven本地库中(install)

在Maven中,可以使用“mvn install”打包项目,并自动部署到本地资源库,让其他开发人员使用它。

mvn install

注意,
当“install”在执行阶段,上述所有阶段 “validate“, “compile“, “test“, “package“, “integration-test“, “verify” 阶段, 包括目前的“install”阶段将被执行有序。

mvn install 示例

一个Java项目,具有以下 pom.xml 文件

File : 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.yiibai.core</groupId>
  <artifactId>yiibai-core</artifactId>
  <packaging>jar</packaging>
  <version>99</version>
  <name>yiibai-core</name>
  <url>http://maven.apache.org</url>
  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.4</version>
      <scope>test</scope>
    </dependency>
  </dependencies>
</project>

基于以上pom.xml文件,在“mvn install”被执行,它会打包项目为“yiibai-core-99.jar”文件,并复制到本地存储库。

警告 建议运行“clean”和“install”在一起,让您能始终部署最新的项目到本地存储库。 

mvn clean install

生成基于Maven的项目文档站点(site)[鸡肋]

在Maven中,可以使用“mvn site”,为您的项目信息生成文档站点。

mvn site

生成的网站是在项目的“target/site”文件夹中。

 

Eclipse创建MAVEN的java web项目

【Maven】Eclipse 使用Maven创建Java Web项目

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值