Maven、pom.xml

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拥有三套相互独立的生命周期  

  • clean:项目清理(包括3个阶段)

pre-clean                 执行一些需要在clean之前完成的工作
clean                        移除所有上一次构建生成的文件
post-clean                执行一些需要在clean之后立刻完成的工作

  • default (build):项目部署 (包括23个阶段... 主要为:)

compile            编译源码
test                  运行测试工程
package           打包项目(JAR / WAR / EAR)
install               将包安装到本地仓库
deploy              将最终的包复制到远程仓库

  • site:项目站点文档创建(包括4个阶段)

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包,但是通过 父项目达到了依赖的效果。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

xyc1211

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值