2.7使用Maven Help插件:
在dos上输入:mvn help:describe -Dplugin=help -Dfull
会看到dos输出help插件的所有目标(golds),我使用的Maven版本是2.0.10,其有9个golds,分别为:
help:active-profiles
help:all-profiles
help:describe
help:effective-pom
help:effective-settings
help:evaluate
help:expressions
help:help
help:system
控制台中输出了其对应的描述和可用参数;
在mvn help:describe -Dplugin=help -Dfull命令中,help插件的describe目标描述了插件(Dplugin)为help的全部(Dfull)信息;
试用以下命令对compiler插件进行描述
mvn help:describe -Dplugin=compiler -Dfull
dos会输出compiler插件下所有的golds的详细信息;
我们可以使用以下命令来指定一个golds的详细信息,使用mojo参数即可:
mvn help:describe -Dplugin=compiler -Dmojo=compile -Dfull
创建一个简单的项目:
mvn archtype:create -DgroupId=org.sonatype.mavenbook.ch03
-DartifactId=Simple -DpackageName=org.sonatype.mavenbook
分析这个命令:
mvn help:dscribe -Dplugin=archtype -Dmojo=create -Dfull
根据dos上的信息,就可以知道create目标参数的含义和用法了;
执行完这个命令后,生成了一个项目,看一下Maven在simple目录下创建的目录结构:
simple/
simple/pom.xml
/src
/src/main
/main/java
/src/test
/test/java
这个目录结构就是Maven约定优于配置的表现;
通过这中方法创建的项目,只产生了一个简单的类org.sonatype.mavenbook.App,它仅仅有13行的java代码:
package org.sonatype.mavenbook;
/**
*Hello world!
*
*/
public class App
{
public static void main(String[] args)
{
System.out.println("Hello world!");
}
}
在simple目录下运行mvn install对项目进行编译,测试和打包;
在dos控制台输入如下命令运行此项目
java -cp target/simple-1.0-SNAPSHOT.jar org.sonatype.mavenbook.App
输出 Hello world!
3.4 简单的项目对象模型(project object model)
我们simple项目的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/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.sonatype.mavenbook.ch03</groupId>
<artifactId>parent</artifactId>
<version>1-SNAPSHOT</version>
</parent>
<artifactId>simple</artifactId>
<packaging>jar</packaging>
<name>Chapter 3 Simple Project Example</name>
<url>http://sonatype.com/book</url>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.5</source>
<target>1.5</target>
</configuration>
</plugin>
</plugins>
</build>
</project>
这是一个简单的pom文件,使用如下命令
mvn help:effective-pom
我们将看到一个大得多的POM,它暴露了Maven的默认设置;
3.5 核心概念
3.5.1 Maven插件和目标(plugins and golds)
9.2.1 超级POM
超级POM定义了一组被所有项目共享的默认设置。可以在${M2_HOME}/lib中的maven-2.0.10-uber.jar文件中的org.apache.maven.project中找到pom-4.0.0.xml;大致内容如下:
......
<repositories>
<repository>
<id>central</id>
<name>Maven Repository Switchboard</name>
<layout>default</layout>
<url>http://repo1.maven.org/maven2</url>
<snapshots>
<enabled>false</enabled>
</snapshots>
</repository>
</repositories>
<pluginRepositories>
<pluginRepository>
<id>central</id>
<name>Maven Plugin Repository</name>
<url>http://repo1.maven.org/maven2</url>
<layout>default</layout>
<snapshots>
<enabled>false</enabled>
</snapshots>
<releases>
<updatePolicy>never</updatePolicy>
</releases>
</pluginRepository>
</pluginRepositories>
......
repositories中定义了一个默认中央仓库Maven Repository Switchboard其仓库URL为http://repo1.maven.org/maven2,不使用snapshots构件(snapshots是一个正在进行的不够稳定的开发版本,这样的构件会随时更新);
pluginRepositories定义了一个默认的插件仓库,设置不使用snapshots构件,更新策略为从不;这就意味着不依赖snapshot构件并且插件库的更新策略为从来都不更新。即使插件库中有更新的插件都不会更新;
9.2.3 有效POM
在pom.xml目录下执行如下指令:
mvn help:effective-pom
控制台会打印出默认pom.xml和当前pom.xml文件的合并内容;
9.3 POM语法
9.3.1 项目版本
Maven中的版本包含以下内容:主版本,次版本,增量版本和限定版本,分别对应如下格式:
<major-version>.<minor-version>.<incremental-version>-<qualifier>
例如:版本1.5.3,主版本是1,次版本是5,增量版本是3
限定版本用来标识里程碑构件:alpha和beta
例如:版本1.5.3-beta-01,主版本1,次版本5,增量版本3,限定版本beta-01;
如果你的版本号没有符合这个标准,那么你的版本好号只会根据字符串被比较;
例如1.0.1b和1.2.1b会使用字符串比较;
9.4.1 依赖范围
compile(编译范围)
compile是默认的范围,编译范围依赖在所有的classpath中可用,同时它们也会被打包;
provided(已提供范围)
provided依赖只有在由第三方已经有提供这个依赖时使用;比如说,tomcat有提供servlet编译的jar,所以在你的web项目里就不需要这个serlvet jar文件,而是直接引用tomcat提供的servlet jar,并且在打包时,provided范围内的jar不会打包到项目中。
runtime(运行时范围)
runtime依赖在运行和测试系统的时候需要,但在编译的时候不需要;
test(测试范围)
test依赖在测试编译和测试运行阶段可用;
system(系统范围)
system范围依赖与provider依赖类似,system依赖需要用户自己指定一个本地系统的jar路径,有点类似eclipse里的user lib;如果你使用此依赖,你必须同时提供一个SystemPath元素,来制定这个jar库的路径;注意,此范围是不推荐使用的,应该尽量去依赖于公共的或者私有的仓库。
9.4.3 依赖版本界限
如下字符来围绕一个或多个版本号来实现版本界限:
(,) 不包含量词
[,] 包含量词
例如,如果你要依赖于JUnit的版本为大于等于3.8但是小于4.0的版本,你可以编写如下依赖:
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>[3.8,4.0)</version>
<scope>test</scope>
</dependency>
其他:例如
[4.0,) 版本大于等于4.0
(,2.0) 版本小于2.0
[1.2] 版本为1.2
9.4.6 依赖管理
如果有一个200多个互相关联的Maven项目,如果每个项目中都有对Mysql数据库驱动程序的依赖,我就得在这200多个pom.xml中都写入对这个驱动程序的依赖;
也许有一天,我们得升级这个mysql驱动程序包,我们就得一一去对200多个pom.xml文件进行修改,把mysql驱动程序依赖更改;
幸运的是Maven在dependencyManagement提供了一个统一管理依赖的版本,介于以上情况,我们可以在顶层pom文件里定义dependencyManagement元素让子项目去引用这个依赖,而不显示的列出版本号。Maven会根据pom的层次关系,到父pom文件中查找dependencyManagement元素,然后使用这个dependencyManagement元素中指定的版本号,例如:
一个顶层pom.xml文件
<project>
<modelVersion>4.0.0</modelVersion>
<groupId>test</groupId>
<artifacId>test</artifacId>
<version>1.0.0</version>
......
<dependencyManagement>
<dependencies>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.2</version>
</dependency>
</dependencies>
</dependencyManagement>
......
</project>
子项目pom.xml
<project>
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>test</groupId>
<artifacId>test</artifacId>
<version>1.0.0</version>
</parent>
......
<dependencies>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<!--<version>5.1.2</version>-->
</dependency>
</dependencies>
......
</project>
9.5.1 坐标详解
Maven坐标由三个部分组成:
groupId:组织名称,例如org.apache
artifactId:项目名字,例如maven
version:版本号,例如2.0.10
共同组织成org.apache.maven-2.0.10
分享到:
相关推荐
maven学习笔记maven学习笔记maven学习笔记
maven基础学习笔记
【标题】:“Maven3 学习笔记” 在软件开发领域,Maven 是一个非常重要的构建工具,尤其在Java世界中占据着主导地位。Maven3 是 Maven 的第三个主要版本,它增强了性能,提升了用户体验,并引入了更多现代化的构建...
**Maven项目学习笔记记录** 在软件开发领域,Maven是一个强大的项目管理和构建工具,尤其在Java开发中广泛使用。本笔记将深入探讨Maven的核心概念、主要功能以及实际应用场景,帮助你更好地理解和掌握这一重要工具...
读书笔记:maven实战学习笔记
Maven 2.0.10 是该工具的一个较早版本,它基于项目对象模型(Project Object Model,POM),提供了一种标准化的方式来管理项目的构建过程、依赖关系以及文档生成。在Linux环境下,Maven 可以方便地与各种版本控制...
### Maven 2 学习笔记 #### 一、Maven 项目的基本结构及创建 Maven使用特定的目录结构来组织项目文件,通过`mvn archetype:create`命令可以快速创建项目模板。例如: ```shell mvn archetype:create -DgroupId=...
通过学习和使用“apache-maven-2.0.10”这个资源包,你可以了解到早期Maven的工作方式,虽然现在推荐使用最新版本,但理解这些基础知识对于理解Maven的工作原理和构建流程至关重要。在实际开发中,掌握Maven能够极大...
**Maven学习笔记** 在Java开发领域,Maven是一个不可或缺的构建工具,它极大地简化了项目的构建、管理和依赖管理过程。Maven通过使用一个项目对象模型(Project Object Model,POM),XML格式的配置文件,定义了...
Maven实战的笔记,通读了Maven实战这本书之后,结合自己的经验,提取了其中大部分使用的操作以及使用经验。采用md编写文档,使用markdown编辑器查看效果更佳
** Maven基础入门 ** Maven是一个Java项目管理工具,它主要负责构建、依赖管理和项目信息管理。...在`maven_study_01`的学习笔记中,你可以找到更多关于Maven的基础知识和实践案例,帮助你快速上手并掌握这一工具。
`apache-maven-2.0.10`是Maven 2.0系列的一个版本,虽然现在最新的版本已经更新到了3.x,但2.0版本仍然对于学习Maven的历史和理解其基本工作原理具有重要意义。 **Maven的项目对象模型(Project Object Model, POM...
从给定的文件信息来看,标题与描述都指向了“Maven3实战笔记(整合)”,这表明文档主要聚焦于Maven3的实践应用与整合经验分享。Maven是Apache软件基金会维护的一个开源项目,是一个项目管理和综合工具,主要用于Java...
读书笔记:Maven 实践学习按理阅读《Maven实战》笔记。
Maven简介,常见概念,安装及配置,Maven常用命令,生命周期说明,在idea中如何创建Maven工程,配置Maven环境以及依赖管理和依赖范围的说明。
maven学习笔记整理
**Maven教程:基础篇——尚硅谷学习笔记 2022年** Maven是一个强大的Java项目管理和构建工具,由Apache软件基金会开发。它通过提供一个标准的项目对象模型(Project Object Model,POM)来简化项目的构建过程,并...