zoukankan      html  css  js  c++  java
  • (一)Maven基础及第一个Maven工程

    一、Maven介绍

    • ANT/Maven/gradle是一个项目管理工具,它包含了一项目对象模型(Project Object Model),一组标准集合,一个项目生命周期(Project Lifecycle),一个依赖管理系统(Dependency Manangement System),和用来运行定义在生命周期阶段中插件目标的逻辑。

    • Maven是面向技术层面,针对Java开发项目管理工具,它提供了构建工具所提供功能的超集,除了构建功能之外,Maven还可以管理项目结构、管理依赖关系、生成报告、生成Web站点、有助于团队成员之间的交流与协作。

    二、声明周期

    三、安装及其第一个Maven工程

       3.1:Maven的安装


        A:解压压缩包到workspace某一目录中。

        B:配置环境变量
            
            M2_HOME:D:WorkSpace_Eclipseapache-maven-3.2.5(类似Java_Home)

            path:    加入D:WorkSpace_Eclipseapache-maven-3.2.5in

        C:cmd窗口:输出mvn -v:如果有提示信息,表示安装成功。


      3.2:目录结构:

        bin

        conf目录:setting.xml:Maven的配置文件。


            A:更改Maven的本地仓库的路径:

            本地仓库:Maven用于存放从网络中下载的jar与插件的存放目录。修改 conf目录下的setting.xml
            <localRepository>D:/WorkSpace_Eclipse/apache-maven-repository</localRepository>

      3.3:Maven与IDE(MyEclipse)结合:



        A:更改MyElipse的默认Maven。Preferences---->MyEclipse---->Maven4MyEclipse--->Installing

        B:更改MyElipse的默认Maven。Preferences---->MyEclipse---->Maven4MyEclipse--->Global Setting File:更改为Maven目录的settting.xml的路径。

        C:更改MyElipse的默认Maven。Preferences---->MyEclipse---->Maven4MyEclipse中的jdk路径。

      3.4:可以MyEclipse创建一个简单的Maven工程。


        约定大于配置。(目录结构)

        Maven 提倡“约定优于配置”(Convention Over Configuration),
        这是 Maven最核心的设计理念之一。

        原因之一就是使用约定可以大量减少配置。

        a) 源码目录为 src/main/java/            【相当于java工程的src目录】

        b) 源码资源目录为 src/main/resources/        :用到的资源文件(各种xml,properites,xsd文件等)都放在src/main/resources下面

        c) 测试目录为 src/test/java/

        d) 测试资源目录为 src/test/resources/

        e) 编译输出目录为 target/classes/【bin/WEB-INF/classes】

        f) 打包方式为 jar/war

        g) 包输出目录为 target/

        h) 超级pom

            超级 pom 定义以上的目录结构、核心插件设定版本。Maven 设定核心插件的原因,

            是防止由于插件版本的变化而造成构建的不稳定。

            遵循约定虽然损失了一定的灵活性,用户不能随意安排目录结构,但是却能减少配置。

            更重要的是,遵循约定能够帮用户遵循构建标准。个性往往意味着牺牲通用性,

            意味着增加无谓的复杂度。

        工程目录(main中的java/resource与test中的java/resource是源文件夹,不是文件夹。)

            src
                main
                    java:            放java的源文件
                    resources        放配置文件。
                    webapp
                        WEB-INF
                        web.xml
                test
                    java            放测试javar的源文件
                    resources        放测试的的配置文件。


                pom.xml                工程模型配置文件。

                    
            target    
                classes

    四、坐标(GAV)

     上面的例子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.shyroke</groupId>
      <artifactId>maven01</artifactId>
      <version>0.0.1-SNAPSHOT</version>
      <packaging>jar</packaging>
    
      <name>maven01</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>
    • GroupID是项目组织唯一的标识符,实际对应JAVA的包的结构,是main目录里java的目录结构
    • ArtifactID就是项目的唯一的标识符,实际对应项目的名称,就是项目根目录的名称。
    • version:版本定义,SNAPSHOT--->Alpha--->Beta--->Release----GA

          SNAPSHOT:内部开发版本

          Alpha:   内部公测版本

          Beta:    对外公开的测试版本

          Release: 可以使用的版本

          GA:     稳定版本
    • <packaging>jar|war|pom</packaging>                运行maven的package命令时,该工程会打包为一个java
    • groupId, artifactId, packaging, version 叫作 maven 坐标,它能唯一的确定一个项目。有了 maven 坐标,我们就可以用它来指定我们的项目所依赖的其他项目,插件,或者父项目。

    五、坐标与依赖

    • Maven工程中的依赖:从本地仓库中寻找。如果本地仓库中寻找不到,再找网络仓库(中央仓库)中寻找。

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

      5.1  案例

    • 将一个写好代码的maven01工程打包,在maven02工程中通过坐标引用这个工程的代码。

    • 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.shyroke</groupId>
        <artifactId>maven01</artifactId>
        <version>2.0.1-SNAPSHOT</version>
        <packaging>jar</packaging>
      
        <name>maven01</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>
      •   这个工程使用install命令 ,会在本地仓库中生成这个工程的文件,如果没有使用install命令则另一个工程无法引用这个工程。
      • maven01工程的gav唯一标识了这个工程,也就是说在maven01工程中的pom.xml文件中引入这个工程的gav就可以使用maven01工程的类的方法。

     

    • 如上图,在maven02工程中成功引用了maven01的类。
  • 相关阅读:
    LeetCode——Generate Parentheses
    LeetCode——Best Time to Buy and Sell Stock IV
    LeetCode——Best Time to Buy and Sell Stock III
    LeetCode——Best Time to Buy and Sell Stock
    LeetCode——Find Minimum in Rotated Sorted Array
    Mahout实现基于用户的协同过滤算法
    使用Java对文件进行解压缩
    LeetCode——Convert Sorted Array to Binary Search Tree
    LeetCode——Missing Number
    LeetCode——Integer to Roman
  • 原文地址:https://www.cnblogs.com/shyroke/p/7286179.html
Copyright © 2011-2022 走看看