Maven初学理解(一)

来源:互联网 发布:js json遍历 编辑:程序博客网 时间:2024/06/08 04:06

一、Maven的特点

Maven是一个项目管理工具,它包含了一个项目对象模型 (Project Object Model),一组标准集合,一个项目生命周期(Project Lifecycle),一个依赖管理系统(Dependency Management System),和用来运行定义在生命周期阶段(phase)中插件(plugin)目标(goal)的逻辑。当你使用Maven的时候,你用一个明确定义的项目对象模型来描述你的项目,然后Maven可以应用横切的逻辑,这些逻辑来自一组共享的(或者自定义的)插件。
Maven 有一个生命周期,当你运行 mvn install 的时候被调用。这条命令告诉 Maven 执行一系列的有序的步骤,直到到达你指定的生命周期。遍历生命周期旅途中的一个影响就是,Maven 运行了许多默认的插件目标,这些目标完成了像编译和创建一个 JAR 文件这样的工作。
此外,Maven能够很方便的帮你管理项目报告,生成站点,管理JAR文件,等等

二、Maven常用命令

mvn archetype:generate 创建Maven项目
mvn compile 编译源代码
mvn deploy 发布项目
mvn test-compile 编译测试源代码
mvn test 运行应用程序中的单元测试
mvn site 生成项目相关信息的网站
mvn clean 清除项目目录中的生成结果
mvn package 根据项目生成的jar
mvn install 在本地Repository中安装jar
mvn eclipse:eclipse 生成eclipse项目文件
mvnjetty:run 启动jetty服务
mvntomcat:run 启动tomcat服务
mvn clean package -Dmaven.test.skip=true:清除以前的包后重新打包,跳过测试类

使用ping  repo1.maven.org可以检测网络是否流畅

使用telnet ip地址+端口可以检测该ip地址的端口是否流畅

三、POM文件标签含义

定义项目的基本信息,描述项目如何构建,声明项目的依赖


第一行指定maven版本和编码方式

<project></project>标签是所有pom的根元素,它声明了一些POM的命名空间以及xsd元素。虽然这些属性不是必须的,但是使用这些属性可以让第三方工具如IDE中的XML编辑器快速的编辑POM。

<modelVersion></modelVersion>指定当前POM模型的版本,对于Maven2和Maven3来说,只能为4.0.0

<groupId></groupId>  定义了这个项目属于哪个组,这个组一般和公司有关。如com.google.myapp

<artifactId></artifactId> 定义了当前maven项目(指的是一个项目中的一个模块)在组中的唯一id

<version></version>   指定该模块的版本,如1.1-SNAPSHOT,1.1。其中SNAPSHOT指的是快照。

<name></name>   非必须的,可以为项目取一个良好的名称,方便交流。

由此我们可以看出,POM可以使项目模型最大程度的与JAVA代码分离,我们称之为解耦。

在大多数情况下,我们项目的主代码位于src/main/java/目录下。无须额外的配置,Maven会自动搜索该目录找到项目主代码。

其次,我们在POM中定义的groupId和artifactId与类的包名相吻合。便于搜索java类。

项目代码编写完后,我们在项目根目录下运行命令mvn clean compile即可编译

clean是清理输出目录target,compile是编译。

为了使代码结构清晰,主代码与测试代码应该分别位于独立的目录中,Maven项目中默认的测试代码目录是src/test/java

在Java的世界里,由kent Beck和Erich Gamma建立的JUnit是事实上的单元测试标准。要使用JUnit,我们首先要为项目添加一个JUnit依赖。即在POM代码清单中添加依赖


<project>

.........

<dependencies>

<dependency>

<groupId><groupId>

<artifactId></artifactId>

<version></version>

<scope></scope>

</dependency>

</dependencies>

.........

<project>

有了这段代码后,Maven会自动访问中央仓库(http://repo1.maven.org/maven2)下载所需的文件。

读者也可以自己访问该仓库,打开路径junit/junit/4.7,即可看到junit-4.7和junit-4.7.jar

scope是指依赖范围,如果为test则只对测试有用,换句话说如果在src/main/java中import JUnit则会报错

配置完后在执行mvn clean test;

四、打包和运行

如未指定打包类型,则默认的打包类型是jar。

通过执行mvn  clean package实现打包。打包后的文件位于target/输出目录下,最后的结果是根据artifact-version进行命名的

如有需要可以复制这个jar文件到其他项目的classpath中,从而使用这个类。

也可以通过执行mvn clean install命令,将jar包输出到本地仓库。使得其他项目可以直接引用这个jar

到目前为止我们还未运行原项目中的main函数,默认打包生成的jar是不可以直接运行的,因为带有main方法的类信息不会添加到manifes中去。需要借助maven-shade-plugin插件。


plugin元素在POM中的相对位置在<project><build><plugins></build></plugins></project>下面,配置好<mainClass></mainClass>标签即可。再执行mvn clean install,待项目构建完成后target/目录下会有两个Jar包。







原创粉丝点击