Maven 自问自答
Maven 自问自答
maven有什么用POM 是一个什么东西解读pomBuild Lifecyclemaven 三条指令运行web项目maven常用指令maven结构maven快照版是什么dependency中的scope含义maven坐标是什么versionClassifier定义version的版本多模块中统一一些依赖推荐学习链接
Apache Maven,作为一个项目管理和综合的工具,说起来很尴尬,一直以来,我都是把他当成一个依赖管理的工具而已,方便的地方就是我不用到处找jar包。同时,我还把他和IDE工具紧密的依赖在一起,每次都是用IDE工具去生成maven,这样看起来真的很糟糕,所以,写这篇自问自答来补全一下知识。
maven有什么用
maven作为一个项目构建和管理的工具,提供了帮助管理、构建、文档、报告、依赖、发布、分发的方法,可以方便的编译代码、进行依赖管理、管理二进制库等等,有利于项目过程的规范化、自动化、高效化、增强了可扩展性。
POM 是一个什么东西
project object model ,项目对象模型。pom中包含了项目的信息和maven build项目所需要的配置信息,通常有项目信息、依赖、插件、goal、build等等。pom是可以被继承的,因此有扩展性。
解读pom
<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.chen
</groupId>
<artifactId>my_spring_boot
</artifactId>
<packaging>war
</packaging>
<name>my_spring_boot Maven Webapp
</name>
<url>http://maven.apache.org
</url>
<parent>
<groupId>org.springframework.boot
</groupId>
<artifactId>spring-boot-starter-parent
</artifactId>
<version>0.5.0.BUILD-SNAPSHOT
</version>
</parent>
<dependencies>
<dependency>
<groupId>org.springframework.boot
</groupId>
<artifactId>spring-boot-starter-web
</artifactId>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot
</groupId>
<artifactId>spring-boot-maven-plugin
</artifactId>
</plugin>
</plugins>
</build>
<repositories>
<repository>
<id>spring-snapshots
</id>
<url>http://repo.spring.io/snapshot
</url>
<snapshots><enabled>true
</enabled></snapshots>
</repository>
<repository>
<id>spring-milestones
</id>
<url>http://repo.spring.io/milestone
</url>
<snapshots><enabled>true
</enabled></snapshots>
</repository>
</repositories>
<pluginRepositories>
<pluginRepository>
<id>spring-snapshots
</id>
<url>http://repo.spring.io/snapshot
</url>
</pluginRepository>
<pluginRepository>
<id>spring-milestones
</id>
<url>http://repo.spring.io/milestone
</url>
</pluginRepository>
</pluginRepositories>
</project>
modelVersion:是object model版本,除非maven开发者升级版本,否则不需要修改。 groupId:指的是项目构建团体或组织唯一标识符,通常是域名倒写。 artifactId:指的是项目名。 package:指的是打包方式:jar、war、ear等等,默认jar。 version artifact:通常是0.0.1-SNAPSHOT,开发版。 name:maven文档中,目的展示名。 url:项目地址。 dependencies:依赖。 parent:父类的pom。 snapshot :快照仓库。 pluginRepositories:插件仓库。
Build Lifecycle
一个项目build的过程。maven的Build Lifecycle分为三种,分别为default(处理项目的部署)、clean(处理项目的清理)、site(处理项目的文档生成)。他们都包含不同的lifecycle。
maven 三条指令运行web项目
mvn archetype:generate -DarchetypeGroupId=org.apache.maven.archetypes -DarchetypeArtifactId=maven-archetype-webapp -DgroupId=packageName -DartifactId=webappName 示例: mvn archetype:generate -DarchetypeGroupId=org.apache.maven.archetypes -DarchetypeArtifactId=maven-archetype-webapp -DgroupId=com.chen.web -DartifactId=my_maven
cd my_maven
mvn tomcat:run -Dmaven.tomcat.port=8080
maven常用指令
mvn compile:编译源代码 mvn test-compile:编译测试代码 mvn clean:清空 mvn test:运行测试 mvn package:打包项目 mvn install:安装打包的jar到本地仓库 mvn clean package:清楚target再打包
maven结构
my-app
|
|
|
|
|
|
|
|
|
|
|
|
|
|
maven快照版是什么
如果maven依赖都是release,那么每次更新以来都是要更换版本才能下载,这样就麻烦了,比如 你依赖的依赖是处于开发期中的,那么每次他修改一次代码(会很频繁),就要升级一次版本,所以maven2推出了snapshot快照仓库和release发布仓库。
dependency中的scope含义
maven打包的时候,是否进行打包。 -compile:默认范围 -provided:说明jdk或容器已经提供这依赖 -runtime:运行和测试需要,编译不需要 -test:测试需要 -system:和provided一样
maven坐标是什么
坐标就是maven构件的定位。比如说junit:junit:4.8.2表示的就是仓库中的路径/junit/junit/4.8.2/junit-4.8.2.pom和/junit/junit/4.8.2/junit-4.8.2.jar这个文件。
<dependency>
<groupId>junit
</groupId>
<artifactId>junit
</artifactId>
<version>4.8.2
</version>
<scope>test
</scope>
</dependency>
version
<主版本>.<次版本>.<增量版本>-<限定符>
Classifier
<dependency>
<groupId>net.sf.json-lib
</groupId>
<artifactId>json-lib
</artifactId>
<version>2.4
</version>
<classifier>JDK15
</classifier>
</dependency>
定义version的版本
<dependency>
<groupId>org.springframework
</groupId>
<artifactid>spring-beans
</artifactId>
<version>2.5
</version>
</dependency>
<dependency>
<groupId>org.springframework
</groupId>
<artifactid>spring-context
</artifactId>
<version>2.5
</version>
</dependency>
<dependency>
<groupId>org.springframework
</groupId>
<artifactid>spring-core
</artifactId>
<version>2.5
</version>
</dependency>
以上代码可改为
<properties>
<spring.version>2.5
</spring.version>
</properties>
<depencencies>
<dependency>
<groupId>org.springframework
</groupId>
<artifactid>spring-beans
</artifactId>
<version>${spring.version}
</version>
</dependency>
<dependency>
<groupId>org.springframework
</groupId>
<artifactid>spring-context
</artifactId>
<version>${spring.version}
</version>
</dependency>
<dependency>
<groupId>org.springframework
</groupId>
<artifactid>spring-core
</artifactId>
<version>${spring.version}
</version>
</dependency>
</depencencies>
多模块中统一一些依赖
<dependencyManagement>
<dependencies>
<dependency>
<groupId>junit
</groupId>
<artifactid>junit
</artifactId>
<version>4.8.2
</version>
<scope>test
</scope>
</dependency>
<dependency>
<groupId>log4j
</groupId>
<artifactid>log4j
</artifactId>
<version>1.2.16
</version>
</dependency>
</dependencies>
</dependencyManagement>
子模块就可以简化成
<dependency>
<groupId>junit
</groupId>
<artifactid>junit
</artifactId>
</dependency>
<dependency>
<groupId>log4j
</groupId>
<artifactid>log4j
</artifactId>
</dependency>
推荐学习链接
maven实战
转载请注明原文地址: https://ju.6miu.com/read-1307723.html