Skip to content

Latest commit

 

History

History
266 lines (194 loc) · 4.24 KB

1_Maven.md

File metadata and controls

266 lines (194 loc) · 4.24 KB

Maven

Maven 是基于项目对象模型(POM),可以通过一小段描述信息来管理项目的构建、报告和文档的软件项目管理工具。

Maven 下载

Maven 官网

Maven 目录结构

src
	|- main
		|--java
			|-- packages
		|-- resources
	|- test
		|--java
			|-- packages

Maven 坐标和仓库

坐标

  • groupID

    项目组织的唯一标识符,实际对应 java 的包的结构,即 main目录里 java 的目录结构。

  • artifactID

    项目的唯一标识符,实际对应项目的名称,就是项目根目录的名称。

groupId 和 artifactId 被统称为坐标。构件通过坐标作为其唯一标识。

groupId 一般为 组织名+公司地址反写+项目名,比如 com.southeast.myprojects

artifactId 一般为 项目名-模块名,比如myprojects-demo

则相应的 package 为 com.southeast.myprojects.demo

镜像仓库

setting.xml 文件中配置:

<mirror>
    <id>maven.net.cn</id>
    <mirrorOf>central</mirrorOf>
    <name>central mirror in china</name>
    <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
</mirror>

修改本地仓库位置

setting.xml 文件中配置:

<localRepository>F:/Java/apache-maven-3.6.2-bin/repo</localRepository>

Maven 常用构建命令

1. 查看版本

mvn - v 

2. 编译

mvn compile

3. 测试

mvn test

4. 打包

mvn package

5. 清除 target

mvn clean

6. 安装 jar

mvn install

7. 自动创建目录骨架

mvn archetype:generate
# 按照提示进行选择
mvn archetype:generate -DgroupId=组织名,公司网址反写+项目名
	-DartifactId=项目名-模块名
	-Dversion=版本号
	-Dpackage=代码所存在的包名

pom.xml 解析

  • 指定当前 pom 版本

    <modelVersion>
  • 坐标

    <groupId>反写公司网址+项目名</groupId>
    <artifactId>项目名+模块名</artifactId>
    <!-- 
        第一个 0 表示大版本号
        第二个 0 表示分支版本号
        第三个 0 表示小版本号
        snapshot 快照
        alpha 内部测试
        beta 公测
        Release 稳定
        GA 正式发布
    -->
    <version>0.0.1snapshot</version>
    <!-- 
        默认是 jar
    	war
    	zip
    	pom
    -->
    <packaging>jar</packaging>
    <!--
    	项目描述名
    -->
    <name></name>
    <!--
    	项目地址
    -->
    <url></url>
  • 依赖列表

    <dependencies>
        <dependency>
        	<groupId></groupId>
    		<artifactId></artifactId>
            <version></version>
            <type></type>
            <!-- 
    			依赖范围:
    			compile 默认的范围,编译测试运行都有效
    			provided 编译测试时有效
    			runtime 测试运行时有效
    			test 只在测试时有效
    			system 与本机系统相关联,可移植性差
    			import 导入的范围,只使用在 dependencyManagement 中,表示从其他的 pom 中导入 dependency 的配置
    		-->
            <scope>test</scope>
            <!-- 
    			设置依赖是否可选
    		-->
            <optional></optional>
            <!-- 
    			排除依赖
    		-->
            <exclusions>
                <exclusion>
                	  <!--
    					坐标
    				  -->
                </exclusion>
            </exclusions>
        </dependency>
    </dependencies>
  • 依赖管理

    <dependencyManagement>
        <dependencies>
            <dependency></dependency>
        </dependencies>
    </dependencyManagement>
  • build 标签

    <build>
        <!--
    		插件列表
    	-->
    	<plugins>
            <plugin>
            	<groupId></groupId>
    			<artifactId></artifactId>
            	<version></version>
            </plugin>
        </plugins>
    </build>
  • parent 标签(继承)

    <parent>
    	<!--
    		坐标
    	-->
    </parent>
  • modules 标签(聚合)

    <modules>
    	<module></module> 
    </modules>

依赖冲突

1. 短路优先

路径1:A -> B -> C -> X(jar)
路径2:A -> D -> X(jar)

这里优先选择路径 2。

2. 先声明先优先

如果路径长度相同,则谁先声明,先解析谁。