zoukankan      html  css  js  c++  java
  • Maven 入门指南

    为什么要用 Maven?

    Maven 主要帮助用户完成以下 3 个方面的工作:
    生命周期管理,便捷的构建过程;
    依赖管理,方便引入所需依赖 Jar 包;
    仓库管理,提供统一管理所有 Jar 包的工具;

    如何安装 Maven?

    • 下载 Maven 二进制包

    apache-maven-3.3.9-bin.tar.gz

    • 解压缩:
    tar xzvf apache-maven-3.3.9-bin.tar.gz
    • 设置 Maven 全局变量

    在 .bash_profile 中添加内容:

    export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.7.0_76.jdk/Contents/Home/
    export M2_HOME=/Users/zhangguanghui/Public/apache-maven-3.3.9
    export M2=$M2_HOME/bin:$PATH
    export MAVEN_OPTS="-Xms256m -Xmx512m"
    • 高级配置

    如果你想改变本地的 jar 包仓库,或者想增加代理服务器以减少从远程仓库获取 jar 包的次数,请参考http://maven.apache.org/guides/mini/guide-configuring-maven.html

    创建第一个 Maven 工程

    • 使用 archetype 模板创建工程
    mvn -B archetype:generate 
     -DarchetypeGroupId=org.apache.maven.archetypes 
     -DgroupId=com.mycompany.app 
     -DartifactId=my-app

    命令执行成功后,产生一个目录文件 my-app,该目录下有一个文件 pom.xml。Maven 就是通过 pom.xml 来构建工程。

    • 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.mycompany.app</groupId>
      <artifactId>my-app</artifactId>
      <packaging>jar</packaging>
      <version>1.0-SNAPSHOT</version>
      <name>my-app</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>
    </project>

    该 pom.xml 文件内包含了最基础的信息,主要有:

    | 标识符 | 含义 |
    |: ------- :|: ------- :|
    | groupId|一般用该项目的组织或团体的域名来标识,例如:org.apache.maven.plugins |
    | artifactId | 代表唯一的工程名 |
    |version| 版本号|
    |packaging| 标识打包的类型,例如有:jar, war, tar |
    |dependencies| 该工程内依赖的其他 jar 包|

    如果想深入了解 pom.xml 文件,请阅读
    http://maven.apache.org/guides/introduction/introduction-to-the-pom.html

    • 坐标

    每一个 Jar 包都需要定义一个唯一标识,方便管理维护,因此 Maven 使用 groupId, artifactId, versionId 三元素组成一个 Jar 的坐标。当我们依赖该 Jar 包时,同样需要指定该 Jar 包的坐标 <groupId, artifactId, versionId> ,Maven 根据这些信息查询下载。

    • 工程的目录结构
    localhost:my-app zhangguanghui$ tree
    .
    |____pom.xml
    |____src
    | |____main
    | | |____java
    | | | |____com
    | | | | |____mycompany
    | | | | | |____app
    | | | | | | |____App.java
    | |____test
    | | |____java
    | | | |____com
    | | | | |____mycompany
    | | | | | |____app
    | | | | | | |____AppTest.java
    目录含义
    ${basedir}/pom.xml pom 文件
    ${basedir}/src/main/java 源代码目录
    ${basedir}/src/test/java 测试代码目录

    如果你想对 Maven 工程的目录结构更多的了解,请阅读:Introduction to the Standard Directory Layout

    如何构建工程?

    在 my-app 目录下(pom.xml 的当前文件)执行 mvn clean install。
    该命令依次会删除上一次构建产生的结果,编译源代码,编译测试代码,运行测试代码,打包,将 Jar 包存储到本地仓库。

    zhangguanghuideMacBook-Pro-3:my-app zhangguanghui$ mvn clean install
    [INFO] Scanning for projects...
    [INFO]
    [INFO] ------------------------------------------------------------------------
    [INFO] Building my-app 1.0-SNAPSHOT
    [INFO] ------------------------------------------------------------------------
    [INFO]
    [INFO] --- maven-clean-plugin:2.5:clean (default-clean) @ my-app ---
    [INFO]
    [INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ my-app ---
    [WARNING] Using platform encoding (UTF-8 actually) to copy filtered resources, i.e. build is platform dependent!
    [INFO] skip non existing resourceDirectory /Users/zhangguanghui/git/IDEA_workspace/my-app/src/main/resources
    [INFO]
    [INFO] --- maven-compiler-plugin:3.1:compile (default-compile) @ my-app ---
    [INFO] Changes detected - recompiling the module!
    [WARNING] File encoding has not been set, using platform encoding UTF-8, i.e. build is platform dependent!
    [INFO] Compiling 1 source file to /Users/zhangguanghui/git/IDEA_workspace/my-app/target/classes
    [INFO]
    [INFO] --- maven-resources-plugin:2.6:testResources (default-testResources) @ my-app ---
    [WARNING] Using platform encoding (UTF-8 actually) to copy filtered resources, i.e. build is platform dependent!
    [INFO] skip non existing resourceDirectory /Users/zhangguanghui/git/IDEA_workspace/my-app/src/test/resources
    [INFO]
    [INFO] --- maven-compiler-plugin:3.1:testCompile (default-testCompile) @ my-app ---
    [INFO] Changes detected - recompiling the module!
    [WARNING] File encoding has not been set, using platform encoding UTF-8, i.e. build is platform dependent!
    [INFO] Compiling 1 source file to /Users/zhangguanghui/git/IDEA_workspace/my-app/target/test-classes
    [INFO]
    [INFO] --- maven-surefire-plugin:2.12.4:test (default-test) @ my-app ---
    [INFO] Surefire report directory: /Users/zhangguanghui/git/IDEA_workspace/my-app/target/surefire-reports
    
    -------------------------------------------------------
     T E S T S
    -------------------------------------------------------
    Running com.mycompany.app.AppTest
    Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.006 sec
    
    Results :
    
    Tests run: 1, Failures: 0, Errors: 0, Skipped: 0
    
    [INFO]
    [INFO] --- maven-jar-plugin:2.4:jar (default-jar) @ my-app ---
    [INFO] Building jar: /Users/zhangguanghui/git/IDEA_workspace/my-app/target/my-app-1.0-SNAPSHOT.jar
    [INFO]
    [INFO] --- maven-install-plugin:2.4:install (default-install) @ my-app ---
    [INFO] Installing /Users/zhangguanghui/git/IDEA_workspace/my-app/target/my-app-1.0-SNAPSHOT.jar to /Users/zhangguanghui/.m2/repository/com/mycompany/app/my-app/1.0-SNAPSHOT/my-app-1.0-SNAPSHOT.jar
    [INFO] Installing /Users/zhangguanghui/git/IDEA_workspace/my-app/pom.xml to /Users/zhangguanghui/.m2/repository/com/mycompany/app/my-app/1.0-SNAPSHOT/my-app-1.0-SNAPSHOT.pom
    [INFO] ------------------------------------------------------------------------
    [INFO] BUILD SUCCESS
    [INFO] ------------------------------------------------------------------------
    [INFO] Total time: 1.615 s
    [INFO] Finished at: 2017-02-15T15:08:55+08:00
    [INFO] Final Memory: 18M/331M
    [INFO] ------------------------------------------------------------------------

    参考

    maven 入门指南
    maven 生命周期
    Maven 默认插件以及功能
    maven 依赖管理
    maven-shade-plugin 入门指南
    maven-assembly-plugin 入门指南
    30 分钟了解 Maven



    转自:https://www.jianshu.com/p/b4ef9978d85d

  • 相关阅读:
    刷题-力扣-剑指 Offer 22. 链表中倒数第k个节点
    刷题-力扣-617. 合并二叉树
    刷题-力扣-1109. 航班预订统计
    刷题-力扣-606. 根据二叉树创建字符串
    刷题-力扣-563. 二叉树的坡度
    扛把子组20191017-8 alpha week 2/2 Scrum立会报告+燃尽图 07
    20191017-7 alpha week 2/2 Scrum立会报告+燃尽图 06
    20191017-6alpha week 2/2 Scrum立会报告+燃尽图 05
    扛把子组20191017-5 alpha week 2/2 Scrum立会报告+燃尽图 04
    记第一次 团建
  • 原文地址:https://www.cnblogs.com/fnlingnzb-learner/p/10536790.html
Copyright © 2011-2022 走看看