zoukankan      html  css  js  c++  java
  • Maven 学习笔记

    Maven 是一个项目管理和构建自动化工具,所有的项目配置信息都被定义在 pom.xml 文件中。通过该文件,Maven 可以管理项目的整个生命周期,包括编译、构建、测试、发布、报告等。

    Maven 使用惯例优于配置的原则 。它要求在没有定制之前,所有的项目都有如下的结构:

    目录 目的
    ${basedir} 存放 pom.xml和所有的子目录
    ${basedir}/src/main/java 项目的 java源代码
    ${basedir}/src/main/resources 项目的资源,比如说 property文件
    ${basedir}/src/test/java 项目的测试类,比如说 JUnit代码
    ${basedir}/src/test/resources 测试使用的资源

    maven 项目在默认情况下会产生 JAR 文件,放在 ${basedir}/target 下面。 

    1、创建 HelloWorld 项目。Maven 安装成功后,在命令行输入:

    mvn archetype:generate -DgroupId=com.mycompany.helloworld -DartifactId=helloworld -Dpackage=com.mycompany.helloworld -Dversion=1.0-SNAPSHOT -DarchetypeCatalog=internal

    archetype:generate 是什么意思呢?archetype 是一个插件的名字,generate是目标(goal)的名字。这个命令的意思是告诉 maven 执行 archetype 插件的 generate 目标。插件目标通常会写成 pluginId:goalId。mvn 本身不会做太多的事情,它把构建的任务交给插件去做。

    一个目标是一个工作单元,而插件则是一个或者多个目标的集合。比如说Jar插件,Compiler插件,Surefire插件等。从看名字就能知道,Jar 插件包含建立Jar文件的目标, Compiler 插件包含编译源代码和单元测试代码的目标。Surefire 插件的话,则是运行单元测试。

    -D 选项指定项目属性。GroupId 指明创建项目的组织或者小组的唯一标识。典型的,此标识以组织的完全限定名来定义。比如,org.apache.maven.plugins是所有Maven插件项目指定的groupId。 artifactId 指明此项目产生的主要产品的基本名称,源代码包通常使用artifactId作为最后名称的一部分。典型的产品名称使用这个格式: <artifactId>- <version>. <extension>(比如:myapp-1.0.jar)。version 项目产品的版本号,Maven帮助你管理版本,可以经常看到SNAPSHOT这个版本,表明项目处于开发阶段。

    其中参数 -DarchetypeCatalog=internal 表示不要从远程服务器上取catalog,不加这个参数,界面会卡死在命令 Generating project in Interactive mode 下。

    2、构建项目。

    ~$cd helloworld
    
    ~$mvn package

    第一次运行 maven 的时候,它会从网上的 maven 库 (repository) 下载需要的程序,存放在电脑的本地库 (local repository) 中,默认的本地库是 ~/.m2/repository/ ,在 Windows 下是 %USER_HOME%.m2 epository ,如果要将库建在其它文件,要修改 apache-maven-X.X.Xconf 下的 setting.xml 文件。

    与首次执行的命令(那是一个goal) archetype:generate 不同,这次执行的只是一个简单的命令---package。不同于goal,这是一个phase(阶段),一个phase是指构建生命周期的一个阶段,构建生命周期是指有序的一系列phase。当给出一个phase,Maven将执行所有的在此阶段前的phase及其自身,例如,如果我们执行compile阶段,实际上执行的阶段有: 

    validate 
    generate-sources 
    process-sources 
    generate-resources 
    process-resources 
    compile

    构建完成后,maven 在 helloworld 下面建立了一个新的目录 target/ ,构建打包后的 jar 文件 helloworld-1.0-SNAPSHOT.jar 就存放在这个目录下。编译后的 class 文件放在 target/classes/ 目录下面,测试 class 文件放在 target/test-classes/ 目录下面。

    可以使用以下的命令来测试新编译和打包出来的jar包:

    java -cp target/helloworld-1.0-SNAPSHOT.jar com.mycompany.helloworld.App

    3、Maven 生命周期。Maven 能支持不同的生命周期,但最常用的是默认的 Maven 生命周期,上面的 mvn package 会依次执行默认生命周期中直到包括 package 阶段前的所有阶段的插件目标。

    process-resources 阶段:resources:resources

    compile 阶段:编译项目的源代码

    process-classes 阶段:(默认无目标)

    process-test-resources 阶段:resources:testResources

    test-compile 阶段:compiler:testCompile

    test 阶段:使用合适的单元测试框架来测试已编译的源代码。这些测试不需要已打包和布署。

    prepare-package 阶段:(默认无目标)

    package 阶段:jar:jar

    参考资料:

    1、Apache Maven 入门篇:http://www.oracle.com/technetwork/cn/community/java/apache-maven-getting-started-1-406235-zhs.html

    2、maven 教程一 入门:http://wentao365.iteye.com/blog/903396

    3、maven 环境快速搭建:http://www.cnblogs.com/fnng/archive/2011/12/02/2272610.html

  • 相关阅读:
    Mac如何自定义本地化文件夹名
    Mac如何升级自带的vim
    0. GC 前置知识
    Git如何修改一个过去的Commit
    1. GC标记-清除算法(Mark Sweep GC)
    防火墙、WAF、IPS、IDS都是什么
    Python dir和vars的区别
    【Kafka】Kafka数据可靠性深度解读
    Java网络编程基础之TCP粘包拆包
    【Kafka】Consumer配置
  • 原文地址:https://www.cnblogs.com/NaughtyBaby/p/4690445.html
Copyright © 2011-2022 走看看