maven学习系列2----maven简单配置

maven几个概念

1,POM(Project Object Model,项目对象模型),

描述项目如何构建、声明项目依赖等。以xml形式来编写命名为pom.xml,一个maven项目对应一个pom.xml。相当于Ant的build.xml文件,gradle的build.gradle文件。

2,构件,

使用maven工具可以将项目编译成很多种类型的包,常用的是jar/war/pom类型的包,这些包在maven的世界中就叫构件。

3,仓库,

统一存放所有maven项目共享的构件的地方。以groupId/artifactId/version/artifactId-version.packaging路径存放。分为本地仓库、远程仓库、中央仓库、私服。后两种属于远程仓库,但是这里列出是因为这两种仓库比较特殊,后续会详细说明。

4,坐标,

概念来源于几何平面,为了准确定位构件的位置提出来的概念(一个java项目会依赖很多开源的jar包,每个jar包都会有很多版本,有了坐标的概念就能很容易的指定某一个具体的jar包了)。maven定义了5个坐标元素:groupId/artifactId/version/packaging/classifier,这样在一个仓库中就可以唯一的标识一个构件了。

5,依赖,

这个很好理解,就是如果一个项目使用了其他构件的功能,这就构成了依赖,例如使用spring框架就需要依赖spring提供的jar包。

6,生成周期,

对所有的构建过程进行抽象和统一。包括:项目的清理、初始化、编译、测试、打包、集成测试、验证、部署和站点生成等。最常用的是清理、编译、测试和打包这四个阶段。这些生成周期具体的任务是由maven插件完成的(例如maven-compiler-plugin插件可以完成compile目标)。

7,聚合,

当一个项目很大时,会分成很多个模块,如果一个模块一个模块的编译的话会很麻烦。聚合这一特性就是为解决此问题而出现的。这样一次就可以把所有模块一起编译(还可以配置只编译其中部分模块)。

8,继承,

在一个大项目中的多个模块中不可避免的会有依赖多个相同的依赖,这就是重复。这样可以将这些重复提出来做成一个单独的模块,其他的模块从此模块继承相应的配置,就像类的父子继承结构一样。


maven配置文件

1,settings.xml,

机器上控制maven的全局配置文件,我们可以将这个文件拷贝到~/.m2/下面,然后修改此文件,在用户范围定制maven的行为。(但是现在都是一人一台电脑,应该不涉及多个用户共用的问题,反正我是没有遇到)


<?xml version="1.0" encoding="UTF-8"?>

<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd">
  <!-- localRepository
   | The path to the local repository maven will use to store artifacts.
   |
   | Default: ${user.home}/.m2/repository
  <localRepository>/path/to/local/repo</localRepository>
  -->
  <strong><localRepository>E:\.m2\repository</localRepository></strong>

</settings>

  • 所有的配置都放在<settings></settings>标签之间
  • 这里只配置了<localRepository/>,从名字也可以猜测出来是配置一个本地仓库,前面讲仓库的概念的时候说过仓库的简单作用。maven从仓库中搜索所需的构件,顺序是先本地仓库,找不到再从配置的远程仓库中搜索(如果没有配置远程仓库,如这里的配置,就从maven提供的中央仓库中搜索,中央仓库目前的位置为:.http://repo.maven.apache.org/maven2)
  • 本地仓库其实也可以不配置,maven默认会在本地创建~/.m2/repository/做为一个本地仓库。在windowns下这个是在c盘,我很讨厌把数据放在C盘,所以我在这里配置到了另外一个盘中。

2,pom.xml,

这个是对应maven项目的配置文件,下面给出helloworld工程的pom.xml文件,通过这个pom可以构建出一个可执行的jar包,具体配置这里先不做详细说明了。

<pre name="code" class="html"><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.itsenlin</groupId>
  <artifactId>helloworld.demo</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <name>Archetype - helloworld.demo</name>
  <url>http://maven.apache.org</url>
  
  <dependencies>
  	<dependency>
  		<groupId>junit</groupId>
  		<artifactId>junit</artifactId>
  		<version>4.12</version>
  		<scope>test</scope>
  	</dependency>
  </dependencies>
  
  <build>
		<plugins>
			<plugin>  
			    <groupId>org.apache.maven.plugins</groupId>  
			    <artifactId>maven-compiler-plugin</artifactId>  
			    <configuration>  
			        <source>1.8</source>  
			        <target>1.8</target>  
			        <encoding>${project.build.sourceEncoding}</encoding>  
			    </configuration>  
			</plugin>  
			<plugin>  
			    <groupId>org.apache.maven.plugins</groupId>  
			    <artifactId>maven-jar-plugin</artifactId>  
			    <version>2.4</version>  
			    <configuration>  
			        <archive>  
			            <manifest>  
			                <!-- 告知 maven-jar-plugin添加一个 Class-Path元素到 MANIFEST.MF文件,以及在Class-Path元素中包括所有依赖项 -->  
			                <addClasspath>true</addClasspath>  
			                <!-- 所有的依赖项应该位于 lib文件夹 -->  
			                <classpathPrefix>lib/</classpathPrefix>  
			                <!-- 当用户使用 lib命令执行JAR文件时,使用该元素定义将要执行的类名 -->  
			                <mainClass>com.itsenlin.Helloworld</mainClass>  
			            </manifest>  
			        </archive>  
			    </configuration>  
			</plugin>  
		</plugins>

	</build>
</project>

 

helloworld工程

1,工程的目录结构

最后一幅图是两幅图合并的,上面是主程序的位置,下面是测试程序的位置图

这个目录结构不是随便安排的,这是maven的另外一个特性“约定优于配置”,在maven中有如下约定:

  • 源码路径:src/main/java
  • 主程序的资源目录:src/main/resources
  • 测试程序路径:src/test/java
  • 测试程序的资源文件路径:src/test/resources
  • 编译输出目录:target/classes/
  • 包输出目录:target/
  • 包格式默认为jar

maven会从这些约定好的路径下查找相应的文件,这样可以减少用户很多配置。

2,源码

Helloworld.java

package com.itsenlin;

public class Helloworld {
	
	public String sayHello(String name){
		return "hello, " + name;
	}

	public static void main(String[] args) {
		System.out.println(new Helloworld().sayHello("world!"));
	}

}
HelloworldTest.java

package com.itsenlin;

import org.junit.Assert;
import org.junit.Test;

public class HelloworldTest {
	
	@Test
	public void sayHelloTest(){
		Helloworld hw = new Helloworld();
		Assert.assertEquals("hello, world!", hw.sayHello("world!"));
	}

}


3,命令行方式构建


进入到pom.xml所在目录下执行“mvn install”即可,



maven会自动在在pom.xml所在目录下生成target目录及target/classes目录,把编译好的class文件放在target/classes/下面,把编译好的jar包放在target目录下



4,将工程导入IDE

这里介绍一下eclipse中导入maven工程的方法

  • 点击File-->import项,然后选中Maven下面的Existing Maven Projects,然后点击Next



  • 点击Browse按钮,选中maven项目pom.xml所在的上级目录,即maven的顶级目录,然后按Finish按钮即可



  • 在eclipse中导入的helloworld工程如下图所示



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值