Maven 基本使用与远端仓库配置

前言

在前章介绍如何[安装Maven](Maven 安装和配置)后,本章继续介绍如何高效的使用Maven帮助我们进行开发.

于Maven真正使用之前,我们通常需要安装一些Maven的插件,帮助我们快速使用和开发.Eclipse Maven开发工具的导入请看Eclipse Maven插件&Tomcat插件. (PS: IDEA的安装教程自行百度)

PS: 本文所用的Maven例子可以在我的Github仓库内找到
https://github.com/SeanYanxml/maven-train


基础知识

在学会安装插件,创建Maven项目后.我们就可以使用Maven进行快速开发了.一个极速版本的Maven项目主要包括如下几块.

localhost:arsenal-jvm Sean$ tree
├── pom.xml
├── src
│   ├── main
│   │   ├── java
│   │   └── resources
│   └── test
│       ├── java
│       └── resources

这么看可能有点抽象.简单解释一下,一个简单的Maven项目通常包括

  • src/main/java
  • src/main/resource
  • src/test/main
  • src/test/resource
  • pom.xml
    这几项 src/xx/xx目录下一般放置开发的源码以及与源码相关的资源.pom.xml文件则为maven的配置文件.

一个简单的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">
    <groupId>com.yanxml</groupId>
     <artifactId>maven-train-quickstart</artifactId>
    <version>0.0.1-SNAPSHOT</version>
</project>

其中包括多个标签进行表示需要的Jar包.其中groupId为组织名,比如:org.springframework就是spring项目的组织名; artifactId为项目名称; version为项目的版本号.

除了如上的基础标签外,Maven的pom.xml文件内还提供了一系列的其他标签:

  • <parent> 子项目标签
  • <dependencies> 依赖外标签 内包括多个依赖子标签
  • <dependency> 依赖内标签 依赖Jar包标签
  • <packaging> 打包类型标签(Jar / War / Pom)
  • <properties> 标签
  • <build>--<plugins>--<plugin>使用的Maven插件
  • <dependencyManagement> - <dependencies> - <dependency>用于管制Jar包的版本(即一个项目的不同子项目的版本一致性)

引用Jar包

根据上文介绍各种标签,我们知道了导入Jar包的标签为<dependencies>-<dependency>.简单的来说,如果我们需要导入log4j的jar包,我们应该如何使用呢.

  • 首先,在网站上查询log4j的相关信息(组织名-项目名-版本号)
    查询地址为mvnrepository
    Maven 基本使用与远端仓库配置
    我们将下方的三项信息拷贝进项目的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>
	<parent>
		<groupId>com.yanxml</groupId>
		<artifactId>maven-train</artifactId>
		<version>0.0.1-SNAPSHOT</version>
	</parent>
	<artifactId>maven-train-quickstart</artifactId>

	<properties>
		<lang.version>1.2</lang.version>

	</properties>

	<dependencies>

		<!-- https://mvnrepository.com/artifact/org.apache.commons/commons-lang3 -->
		<dependency>
			<groupId>org.apache.commons</groupId>
			<artifactId>commons-lang3</artifactId>
			<version>3.7</version>
		</dependency>

		<!-- https://mvnrepository.com/artifact/log4j/log4j -->
		<dependency>
			<groupId>log4j</groupId>
			<artifactId>log4j</artifactId>
			<version>1.2.17</version>
		</dependency>

	</dependencies>
</project>

完成上述引用后,我们就可以在项目内对Jar包内的类进行引用了.例如import org.apache.log4j.Logger; 详细的例子如下:

package com.yanxml.maven.quickstart;

import org.apache.log4j.Logger;

import org.apache.log4j.BasicConfigurator;
import org.apache.log4j.PropertyConfigurator;
import org.apache.log4j.xml.DOMConfigurator;

public class HelloworldLog4jDemo {
	private static Logger logger = Logger.getLogger(HelloworldLog4jDemo.class);  

    /** 
     * @param args 
     */  
    public static void main(String[] args) {  

        // 记录debug级别的信息  
        logger.debug("This is debug message.");  
        // 记录info级别的信息  
        logger.info("This is info message.");  
        // 记录error级别的信息  
        logger.error("This is error message.");  
    }  
}

仓库

上文我们知道配置<dependence>标签内的配置,我们就可以使用远端包的内容了.这是怎么做到的呢?

答案非常简单.当你进行一些列的配置后,Maven工具会将包下载到本地配置的repository目录内,随后引入classpath进行加载.本地仓库的内的log4j包如下所示:
Maven 基本使用与远端仓库配置
与项目内如下所示:
Maven 基本使用与远端仓库配置
当然,官方的库内,有可能没有你需要的Jar包. 于是,我们可以配置其他的第三方包或者mvn install直接导入本地仓库即可.

### pom.xml内其他仓库源设置(aliyun)
<mirror>
    <id>nexus-aliyun</id>
    <name>Nexus aliyun</name>
    <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
    <mirrorOf>central</mirrorOf>
</mirror>

<mirror>
    <id>jboss-public-repository-group</id>
    <mirrorOf>central</mirrorOf>
    <name>JBoss Public Repository Group</name>
    <url>http://repository.jboss.org/nexus/content/groups/public</url>
</mirror>

Reference

[1] 推荐几个好用的maven仓库镜像站
[2] mvnrepository.com/
[3] Maven中的dependencyManagement 意义