maven库中心:Maven Central Repository Search 搜索可以用的包与版本
目录
Maven
使用方法:
1. 下载,配置:
2. 项目中使用
3. 生命周期
4. 构建插件
MAVEN工程 的目录结构
父子项目
创建父项目
创建子项目
Maven
是专门用于构建和管理Java相关项目的工具。所管理的Java项目都维护统一的jar包,有着相同的项目结构
约定>配置>编码
使用方法:
1. 下载,配置:
1. 下载apache-maven-3.5.0, 安装, 添加环境变量Path , MAVEN_HOME
mvn -v #检查版本
2. 创建一个maven仓库, 放所有的jar包
maven配置文件 \apache-maven-3.5.0\conf\settings.xml
1) 在52行 指定仓库的路径
<
localRepository
>仓库文件路径</
localRepository
>
2) 指定jar包下载地址
maven 会默认从maven官方提供的服务器下载jar包。而官方服务器在国外,网速慢,卡
所以在 \apache-maven-3.5.0\conf\settings.xml 位置160-165行,在mirrors下新加一个阿里云的镜像地址:
<mirror>
<id>alimaven</id>
<mirrorOf>central</mirrorOf>
<name>aliyun maven</name>
<url>http://maven.aliyun.com/nexus/content/repositories/central/</url>
</mirror>
2. 项目中使用
1. 创建MAVEN风格的JAVA项目
1.1 命令行创建
mvn archetype:generate -DgroupId=项目包名 -DartifactId=项目名称 -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false
【 通常都是在Eclipse或者IDEA中,通过集成Maven的方式来创建Java项目】
1.2 Eclipse工具创建
首先eclipse工具集成maven:
window-preference- 搜Maven
->Installations 添加自己的MAVEN安装目录
->User Setting 添加MAVEN的settings.xml
eclipse创建maven项目:
菜单 -> File -> New -> Other -> Maven -> Maven -> Maven Project -> New Maven Project
选择具体要创建的项目模板, 或者创建简单的项目 Create a simple project (skip archetype selection)
Group Id: 填写包名
Artifact Id: 填写项目名
pom.xml指定当前项目需要用到的jar包
编写代码, 开发项目
如果选择了创建WEB项目 maven-archetype-webapp 会有两个问题
1). 没有java源代码目录
右键项目->属性->Java Build Path->Libraries->Edit->Workspace default JRE(jdk8)->Finish
2). index.jsp报错
pom.xml,出现pom专有的编辑页面,Add 添加servlet.jar包
2. 然后在项目中用pom.xml文件 添加需要jar包的名称和版本号
<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.0http://maven.apache.org/xsd/maven-4.0.0.xsd">
<!-- 模型版本 -->
<modelVersion>4.0.0</modelVersion>
<!-- 项目包名: 一般是公司或者组织的唯一标志,并且配置时生成的路径也是由此生成 -->
<groupId>com.test</groupId>
<!-- 项目名称:项目的的唯一ID,一个groupId下面可能多个项目,就是靠artifactId来区分的 -->
<artifactId>test-core</artifactId>
<!-- 本项目目前所处的版本号 -->
<version>1.0.0-SNAPSHOT</version>
<!-- 打包的机制,如pom,jar, maven-plugin, ejb, war, ear, rar, par,默认为jar -->
<packaging>jar</packaging>
<!-- 帮助定义构件输出的一些附属构件,附属构件与主构件对应,有时候需要加上classifier才能唯一的确定该构件 不能直接定义项目的classifer,因为附属构件不是项目直接默认生成的,而是由附加的插件帮助生成的 -->
<classifier>...</classifier>
<!-- 定义本项目的依赖关系 -->
<dependencies>
<!-- 每个dependency都对应一个jar包 -->
<dependency>
<!-- 一般情况下,maven是通过groupId、artifactId、version这三个元素值(俗称坐标)来检索该构件, 然后引入你的工程。
如果别人想引用你现在开发的这个项目(前提是已开发完毕并发布到了远程仓库)就需要在他的pom文件中新建一个dependency节点,将本项目的groupId、artifactId、version写入, maven就会把你上传的jar包下载到他的本地 -->
<groupId>com.winner.trade</groupId>
<artifactId>trade-test</artifactId>
<version>1.0.0-SNAPSHOT</version>
<!-- 作用域(scope)的限制: maven认为,程序对外部的依赖会随着程序的所处阶段和应用场景而变化 -->
<!--scope包含如下的取值:compile(编译范围)、provided(已提供范围)、runtime(运行时范围)、test(测试范围)、system(系统范围) -->
<scope>test</scope>
<!-- 设置指依赖是否可选,默认为false,即子项目默认都继承:为true,则子项目必需显示的引入,与dependencyManagement里定义的依赖类似 -->
<optional>false</optional>
<!-- 屏蔽依赖关系。 比如项目中使用的libA依赖某个库的1.0版,libB依赖某个库的2.0版,现在想统一使用2.0版,就应该屏蔽掉对1.0版的依赖 -->
<exclusions>
<exclusion>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
</exclusion>
</exclusions>
</dependency>
</dependencies>
<!--构建项目 -->
<build>
<!--使用的插件列表 -->
<plugins>
</plugins>
</build>
<!-- 为pom定义一些常量,在pom中的其它地方可以直接引用 使用方式 如下 :${file.encoding} -->
<properties>
<file.encoding>UTF-8</file.encoding>
<java.source.version>1.5</java.source.version>
<java.target.version>1.5</java.target.version>
</properties>
<!-- 项目分发信息,部署到远程服务器或者把构件部署到远程仓库 -->
<distributionManagement>
<!--部署项目产生的构件到远程仓库需要的信息 -->
<repository>
<id>banseon-maven2</id>
<name>banseon maven2</name>
<url>file://${basedir}/target/deploy</url>
</repository>
<!--构件的快照部署到哪里?如果没有配置该元素,默认部署到repository元素配置的仓库 -->
<snapshotRepository>
<uniqueVersion />
<id>banseon-maven2</id>
<name>Banseon-maven2 Snapshot Repository</name>
<url>scp://svn.baidu.com/banseon:/usr/local/maven-snapshot</url>
</snapshotRepository>
</distributionManagement>
...
</project>
3. 生命周期
maven拥有三套相互独立的生命周期
pre-clean 执行一些需要在clean之前完成的工作
clean 移除所有上一次构建生成的文件
post-clean 执行一些需要在clean之后立刻完成的工作
-
default (build):项目部署 (包括23个阶段... 主要为:)
compile 编译源码
test 运行测试工程
package 打包项目(JAR / WAR / EAR)
install 将包安装到本地仓库
deploy 将最终的包复制到远程仓库
pre-site 执行一些需要在生成站点文档之前完成的工作
site 生成项目的站点文档
post-site 执行一些需要在生成站点文档之后完成的工作,并且为部署做准备
site-deploy 将生成的站点文档部署到特定的服务器上
各个生命周期是相互独立的,但同一个生命周期的阶段是有前后依赖关系
在一个生命周期中,运行某个阶段的时候,它之前的所有阶段都会被运行
4. 构建插件
生命周期相当于 Maven 提供的统一的接口,然后由 Maven 的插件来完成实现
Maven 实际上是一个依赖插件执行的框架,每个任务实际上是由插件完成
- 插件是在 pom.xml 中使用 plugins 元素定义的。
IDEA提供了maven的工具窗口 ,可以双击执行 生命周期与插件
idea maven 视图用法(https://www.jianshu.com/p/942be26a03e0)
maven面板的介绍 https://jingyan.baidu.com/article/cbcede074c406c02f40b4dc4.html
MAVEN工程 的目录结构
/src
/main
/java java源码
/resource java各种配置文件,资源文件
/webapp web各种源文件,格式文件如css,js,html,jsp等
/test
/java java测试代码
/target 文件编译过程中生成的.class文件,jar,war等
pool.xml 项目核心配置文件
父子项目
通过 maven 可以创建父子-聚合项目。 所谓的父子项目,即有一个父项目,有多个子项目。
这些子项目在业务逻辑上,都归纳在这个父项目下,并且一般来说都会有重复的jar包共享。把重复的 jar 包都放在父项目下进行依赖,那么子项目就无需再去依赖这些重复的 jar 包了
创建父项目
正常的maven项目, 修改一些pom.xml配置 就可以作为一个父项目
<!-- 打包方式默认是 jar, 修改为pom。 这样才可以作为父项目存在。 -->
<packaging>pom</packaging>
<!-- 增加 hutool jar 包的依赖,用于后来子项目里观察对其的调用。 -->
<dependencies>
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
<version>4.3.1</version>
</dependency>
</dependencies>
<!-- 子项目 -->
<modules>
<module>子项目artifactId</module>
</modules>
创建子项目
eclipse在 parentMavenProject父项目 的基础上创建其子项目,首先右键点击 parentMavenProject, 然后点击 New -> Other -> Maven -Maven Module -> Next
子项目pom.xml
<parent>
<groupId>父项目groupId</groupId>
<artifactId>父项目artifactId</artifactId>
<version>父项目version</version>
</parent>
这样, 子项目虽然没有依赖jar包,但是通过 父项目达到了依赖的效果。