Maven 架构搭建的命令行及学习笔记(一)

Maven 架构搭建的命令行及学习笔记

==================================================

1.配置环境变量:

说明:

系统环境变量和用户变量的区别

搭建编译环境时为什么有时候要设置环境变量,而有时又设置用户变量?

环境变量分为系统环境变量和用户环境变量。

你所说的环境变量是指系统环境变量,对所有用户起作用

而用户环境变量只对当前用户起作用。

例如你要用java,那么你把java的bin目录加入到path变量下面,那么它就是系统环境变量,所有用户登陆,在命令行输入java都会有java的帮助信息出来。而如果你在某个用户的变量下面新建一个变量,那么它就只对这个用户有用,当你以其他用户登陆时这个变量就和不存在一样。

2.如何查询环境环境变量:

C:\Users\Administrator>echo %M2_HOME%
D:\java\apache-maven-3.2.3

C:\Users\Administrator>mvn -v
Apache Maven 3.2.3 (33f8c3e1027c3ddde99d3cdebad2656a31e8fdf4; 2014-08-12T04:58:1
0+08:00)
Maven home: D:\java\apache-maven-3.2.3
Java version: 1.6.0_29, vendor: Sun Microsystems Inc.
Java home: D:\java\JDK1.6\jre
Default locale: zh_CN, platform encoding: GBK
OS name: "windows 7", version: "6.1", arch: "x86", family: "windows"
C:\Users\Administrator>

----

3.Maven初始化执行mvn help:system查询环境参数,并且下载基本的maven到默认的~/m2设置的仓库。

系统会自动从中心库(如果配置代理服务器,或者nexus服务器)

下载maven-help-plugin插件。

其次获得环境信息,最后显示环境变量信息,(使用.....省略相关信息)

s/plexus-utils/1.5.7/plexus-utils-1.5.7.pom (8 KB at 8.2 KB/sec)
Downloading: http://localhost:8081/nexus/content/groups/public/jdom/jdom/1.0/jdo
m-1.0.pom
Downloaded: http://localhost:8081/nexus/content/groups/public/jdom/jdom/1.0/jdom
-1.0.pom (2 KB at 1.8 KB/sec)
......................................
stream/xstream/1.4.3/xstream-1.4.3.jar (471 KB at 20.2 KB/sec)
[INFO]
===============================================================================
========================= Platform Properties Details =========================
===============================================================================

===============================================================================
System Properties
===============================================================================

java.runtime.name=Java(TM) SE Runtime Environment
sun.boot.library.path=D:\java\JDK1.6\jre\bin
java.vm.version=20.4-b02
java.vm.vendor=Sun Microsystems Inc.
java.vendor.url=http://java.sun.com/
...............
java.endorsed.dirs=D:\java\JDK1.6\jre\lib\endorsed
os.arch=x86
java.io.tmpdir=C:\Users\ADMINI~1\AppData\Local\Templine.separator=

java.vm.specification.vendor=Sun Microsystems Inc.
user.variant=
os.name=Windows 7
classworlds.conf=D:\java\apache-maven-3.2.3\bin\m2.conf
sun.jnu.encoding=GBK
...............................
sun.io.unicode.encoding=UnicodeLittle
sun.cpu.endian=little
sun.desktop=windows
sun.cpu.isalist=pentium_pro+mmx pentium_pro pentium+mmx pentium i486 i386 i86

===============================================================================
Environment Variables
===============================================================================
CLASSWORLDS_JAR="D:\java\apache-maven-3.2.3\boot\plexus-classworlds-2.5.1.jar"
TMP=C:\Users\ADMINI~1\AppData\Local\Temp
PROGRAMFILES(X86)=C:\Program Files (x86)
COMPUTERNAME=PC201408041613
OS=Windows_NT
PROMPT=$P$G
..........................................................
HOME=C:\Users\Administrator
PROCESSOR_LEVEL=6
ERROR_CODE=0
SESSIONNAME=Console
USERNAME=Administrator
PATHEXT=.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC
WINDOWS_TRACING_FLAGS=3
PUBLIC=C:\Users\Public
PROCESSOR_REVISION=2505

[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 03:18 min
[INFO] Finished at: 2014-12-19T13:32:51+08:00
[INFO] Final Memory: 5M/15M
[INFO] ------------------------------------------------------------------------
C:\Users\Administrator>

构造结束


3.1. Maven

3.1.1. Maven介绍

  • 我们使用maven构建应用环境,因此我们先来简单介绍maven。Maven是什么?如何回答这个问题 要看你怎么看这个问题。 绝大部分Maven用户都称Maven是一个"构建工具":一个用来把源代码构建成可发布的构件的工具。构建工程师和项目经理会说Maven是一个更复杂 的东西:一个项目管理工具。那么区别是什么? 像Ant这样的构建工具仅仅是关注预处理,编译,打包,测试和分发,而 Maven 这样的一个项目管理工具提供了构建工具所提供功能的超集, 除了提供构建的功能,Maven还可以生成报告,生成Web站点,并且帮助推动工作团 队成员间的交流。
  • Maven目前最新版本是2.1.0. 因为maven2.0的版本与maven1.0相比完全是重新设计的,而且速度比以前更快,所以称为 maven2. 目前很多的开源项目都已经采用maven2构建,足见其流行好用的程度。 注:本指南中所提及的maven均指maven2。

3.1.2. Maven常用命令

  • mvn archetype:create :创建 Maven 项目
  • mvn compile :编译源代码
  • mvn test-compile :编译测试代码
  • mvn test : 运行应用程序中的单元测试
  • mvn site : 生成项目相关信息的网站
  • mvn clean :清除目标目录中的生成结果
  • mvn package : 依据项目生成 jar 文件
  • mvn install :在本地 Repository 中安装 jar
  • mvn eclipse:eclipse :生成 Eclipse 项目文件
  • mvn -Dmaven.test.skip=true : 忽略测试文档编译

3.2. POM

POM全称是Project Object Model,即项目对象模型。pom.xml是maven的项目描述文件,它类似与antx的project.xml文件。pom.xml文件以xml的 形式描述项目的信息,包括项目名称、版本、项目id、项目的依赖关系、编译环境、持续集成、项目团队、贡献管理、生成报表等等。总之,它包含了所有的项目 信息。

3.2.1. 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>org.codehaus.mojo</groupId>
  <artifactId>my-project</artifactId>
  <version>1.0</version>
</project>

modelVersion 描述这个POM文件是遵从哪个版本的项目描述符。

groupId 针对一个项目的普遍唯一识别符。通常用一个完全正确的包的名字来与其他项目的类似名字来进行区分(比如:org.apache.maven)。

artifactId 在给定groupID 的group里面为artifact 指定的标识符是唯一的 , artifact 代表的是被制作或者被一个project应用的组件(产出物)。

version 当前项目产生的artifact的版本

以上4个元素缺一不可,其中groupId, artifactId, version描述依赖的项目唯一标志。

3.2.2. pom.xml文件结构

<project>
  <modelVersion>4.0.0</modelVersion>
  <!- The Basics   项目的基本信息->
  <groupId>...</groupId>
  <artifactId>...</artifactId>
  <version>...</version>
  <packaging>...</packaging>
  <dependencies>...</dependencies>
  <parent>...</parent>
  <dependencyManagement>...</dependencyManagement>
  <modules>...</modules>
  <properties>...</properties>
  <!- Build Settings  项目的编译设置->
  <build>...</build>
  <reporting>...</reporting>
  <!- More Project Information 其它项目信息 ->
  <name>...</name>
  <description>...</description>
  <url>...</url>
  <inceptionYear>...</inceptionYear>
  <licenses>...</licenses>
  <organization>...</organization>
  <developers>...</developers>
  <contributors>...</contributors>
  <!-- Environment Settings  ->
  <issueManagement>...</issueManagement>
  <ciManagement>...</ciManagement>
  <mailingLists>...</mailingLists> 
  <scm>...</scm>
  <prerequisites>...</prerequisites>
  <repositories>...</repositories>
  <pluginRepositories>...</pluginRepositories>
  <distributionManagement>...</distributionManagement>
  <profiles>...</profiles>
</project>

project是pom.xml的根节点,至于其它元素请参考POM Reference

3.2.3. POM很重要的3个关系

POM有3个很重要的关系:依赖、继承、合成。

3.2.3.1. 依赖关系

<dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.0</version>
      <type>jar</type>
      <scope>test</scope>
      <optional>true</optional>
    </dependency>
    ...
</dependencies>

如果想依赖一个maven库中没有的一个jar包,方法很简单,就是先将此jar包使用以下的命令安装到本地maven库中:

mvn install:install-file -Dfile=my.jar -DgroupId=mygroup -DartifactId=myartifactId -Dversion=1

再把依赖关系加进去即可。

3.2.3.2. 继承关系

另一个强大的变化, maven带来的是项目继承。

3.2.3.2.1. 定义父项目
<project>
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.mygroup </groupId>
  <artifactId>my-parent</artifactId>
  <version>2.0</version>
  <packaging>pom</packaging>
</project>

packaging 类型,定义值为 pom用于定义为parent和合成多个项目。 当然我们创建的maven项目的pom都继承maven的super pom, 如果想看项目(父或子)的完全的pom结构,可以运行:

mvn help:effective-pom

就可以了。

3.2.3.2.2. 子项目配置
<project>
   <modelVersion>4.0.0</modelVersion>
   <groupId>com.mygroup </groupId>
   <artifactId>my-child-project</artifactId>
   <parent>
        <groupId>com.mygroup </groupId>
        <artifactId>my-parent</artifactId>
        <version>2.0</version>
        <relativePath>../my-parent</relativePath>
    </parent>
</project>

relativePath可以不需要,但是用于指明parent的目录,用于快速查询。

3.2.3.3. 合成关系

一个项目有多个模块,也叫做多重模块,或者合成项目。 如下的定义:

<project>
   <modelVersion>4.0.0</modelVersion>
   <groupId>com.mygroup </groupId>
   <artifactId>my-parent</artifactId>
   <version>2.0</version>
   <modules>
       <module>my-child-project1<module>
       <module>my-child-project2<module>
   </modules>
</project>

其中module 描述的是子项目的相对路径 。

3.2.4. dependencyManagement和Profile

Maven 还我们提供了一个dependencyManagement元素,用来提供了一种方式来统一依赖版本号。dependencyManagement元素一 般用在顶层的父POM。使用pom.xml中的dependencyManagement元素能让你在子项目中引用一个依赖而不用显式的列出版本号。 Maven会沿着父子层次向上走,直到找到一个拥有dependencyManagement元素的项目,然后它就会使用在这个 dependencyManagement元素中指定的版本号,这样就解决了修改依赖版本号不完全的问题。

Maven的Profile元素可以为一个特殊的环境自定义一个特殊的构建,使得不同环境间构建的可移植性成为可能。比如要使用 production profile来运行mvn install,你需要在命令行传入-Pproduction参数,这里production是profile的id。要验证production profile覆盖了默认的Compiler插件配置,可以像这样以开启调试输入(-X) 的方式运行Maven。


时间: 2024-08-07 21:19:39

Maven 架构搭建的命令行及学习笔记(一)的相关文章

Maven 架构搭建的命令行及学习笔记(二)

Sonatype Nexus笔记 如图: 包含各种类型:主机.代理,虚拟,分组. 主要包含仓库组,宿主仓库,代理仓库三种类型. 如图以上值包含Public Repositories(公用仓库组),此库包含如下子仓库. 仓库说明: Maven Central:Maven中央仓库.策略为Release.此库为中央仓库,保存下载和缓存中央仓库发布的构件版本. Releases:发布版本库.此库为宿主类型的仓库,主要部署并且组织内部所有发布的版本的构件. Snapshort:快照库.这个是一个不熟内部快

NET Core 环境搭建和命令行CLI入门

NET Core 环境搭建和命令行CLI入门 2016年6月27日.NET Core & ASP.NET Core 1.0在Redhat峰会上正式发布,社区里涌现了很多文章,我也计划写个系列文章,原因是.NET Core的入门门槛相当高,很有必要写个深入浅出的系列文章,本节内容帮助你入门.我将可能用Windows做开发环境,也可能用Linux/Mac,但是所有的dotnet CLI命令都是跨平台的,我们在windows/Linux/mac平台上开发跨平台的应用. 安装.NET Core .NET

NET Core 环境搭建和命令行CLI入门[转]

NET Core 环境搭建和命令行CLI入门 时间:2016-07-06 01:48:19      阅读:258      评论:0      收藏:0      [点我收藏+] NET Core 环境搭建和命令行CLI入门 2016年6月27日.NET Core & ASP.NET Core 1.0在Redhat峰会上正式发布,社区里涌现了很多文章,我也计划写个系列文章,原因是.NET Core的入门门槛相当高,很有必要写个深入浅出的系列文章,本节内容帮助你入门.我将可能用Windows做开

&lt;&lt;Linux 命令行大全学习1~2章笔记&gt;&gt;暑假学习

 <<Linux 命令行大全学习1~2章笔记>>暑假学习 第一章:shell是什么? 1 shell Shell是一个和Linux内核交互的解释性程序,我们在图形用户下通过shell终端仿真器可以和操作系统进行交互. 2本章命令行 date:显示时间 cal:  显示日历 df: 显示磁盘驱动器内存 free:显示系统内存 exit:退出终端 第二章:导航 2.1理解文件系统树 Linux系统采用树的结构表示系统的文件.目录和设备文件. 2.2当前工作目录 树的顶部是根目录,通常/

(转)两千行PHP学习笔记

亲们,如约而至的PHP笔记来啦~绝对干货! 以下为我以前学PHP时做的笔记,时不时的也会添加一些基础知识点进去,有时还翻出来查查. MySQL笔记:一千行MySQL学习笔记http://www.cnblogs.com/shockerli/p/1000-plus-line-mysql-notes.html //语法错误(syntax error)在语法分析阶段,源代码并未被执行,故不会有任何输出. /* [命名规则] */ 常量名 类常量建议全大写,单词间用下划线分隔 // MIN_WIDTH 变

Egret 学习之简介,环境搭建及命令行语法 (一)

1,简介 1)egret是一个开源免费的游戏框架,它使用TypeScript脚本语言进行开发:当游戏完成最终的打包后,可以将程序转换为h5游戏,实现跨平台性:它基于BSD(Berkly Software Distribution 伯克利软件发行)协议: 2)它不仅是基于h5的游戏引擎,还提供了很多辅助游戏开发的工具.准确的来说egret是一套游戏开发的 解决方案.既可以使用该引擎开发h5游戏,并运行到手机和PC端的浏览器中,同时也可以使用egret来搭建游戏开发工作流: 2,安装过程: 到官网下

.NET Core系列 : 1、.NET Core 环境搭建和命令行CLI入门

2016年6月27日.NET Core & ASP.NET Core 1.0在Redhat峰会上正式发布,社区里涌现了很多文章,我也计划写个系列文章,原因是.NET Core的入门门槛相当高,很有必要写个深入浅出的系列文章,本节内容帮助你入门.我将可能用Windows做开发环境,也可能用Linux/Mac,但是所有的dotnet CLI命令都是跨平台的,我们在windows/Linux/mac平台上开发跨平台的应用. 安装.NET Core .NET Core 包括.NET Core Runti

笔记:Maven 生命周期与命令行详解

Maven 拥有三套相互独立的生命周期,分别是 clean.default和site,clean 生命周期的目的是清理项目,default 生命周期的目的是构建项目,而site生命周期的目的是建立项目站点,每个生命周期包含一些阶段,这些阶段是有顺序的,并且后面的阶段依赖前面的阶段,用户和Maven最直接的交互方式就是调用这些生命周期阶段. clean 生命周期:包含的阶段有 pre-clean.clean 和 post-clean pre-clean:执行一些清理前需要完成的工作 clean:清

python 命令行参数学习(一)

用了这么久,还没怎么学习python的命令行参数,是在惭愧. 参考文章地址:http://www.cnblogs.com/jianboqi/archive/2013/01/10/2854726.html 自己的代码实例: #-*-coding:utf-8-*- __author__ = 'Deen' ''' import argparse parser = argparse.ArgumentParser() parser.parse_args() ''' ''' import argparse