Java学习路线-66:Maven

简介: Java学习路线-66:Maven

Maven 简介

版本控制工具 cvs,svn,git


项目构建工具 make, ant, maven gradle


1、配置文件


pom.xml


project object model


2、Maven 优势


跨平台

服务于构建:清理,编译,测试,生成报告,打包,部署

标准化

封装构建过程

依赖管理工具

安装和配置

下载地址:https://maven.apache.org/download.cgi


Mac 安装步骤:

wget https://mirrors.tuna.tsinghua.edu.cn/apache/maven/maven-3/3.6.3/binaries/apache-maven-3.6.3-bin.tar.gz
tar -xvf apache-maven-3.6.3-bin.tar.gz
vim ~/.bash_profile
# Maven
export MAVEN_HOME=/usr/local/apache-maven-3.6.3-bin
export PATH=${PATH}:${MAVEN_HOME}/bin
mvn -v
Apache Maven 3.6.3

GAV

<groupId>org.example</groupId>
<artifactId>spring-mvc-demo</artifactId>
<version>1.0-SNAPSHOT</version>

示例


<?xml version="1.0" encoding="UTF-8"?>
<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/xsd/maven-4.0.0.xsd">
    <!-- 常量 -->
    <modelVersion>4.0.0</modelVersion>
    <!-- GAV -->
    <groupId>org.example</groupId>
    <artifactId>spring-mvc-demo</artifactId>
    <version>1.0-SNAPSHOT</version>
    <!-- 依赖 -->
    <dependencies>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-core</artifactId>
            <version>5.2.6.RELEASE</version>
            <!-- 作用域 -->
            <scope></scope>
        </dependency>
    </dependencies>
</project>

目录结构

${basedir}  存放pom.xml和所有的子目录
${basedir}/src/main/java  项目的java源代码
${basedir}/src/main/resources 项目的资源,比如说property文件,springmvc.xml
${basedir}/src/test/java  项目的测试类,比如说Junit代码
${basedir}/src/test/resources 测试用的资源
${basedir}/src/main/webapp/WEB-INF  web应用文件目录,web项目的信息,比如存放web.xml、本地图片、jsp视图页面

项目示例

项目结构

.
├── pom.xml
└── src
    ├── main
    │   ├── java
    │   │   └── Hello.java
    │   └── resources
    └── test

pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<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/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>org.example</groupId>
    <artifactId>demo</artifactId>
    <version>1.0-SNAPSHOT</version>
</project>

Hello.java

public class Hello {
    public static void main(String[] args) {
        System.out.println("Hello");
    }
}

操作命令

常用操作

# 创建项目
mvn archetype:generate \
"-DgroupId=com.companyname.bank" \
"-DartifactId=consumerBanking" \
"-DarchetypeArtifactId=maven-archetype-quickstart" \
"-DinteractiveMode=false"
参数说明:
-DgourpId: 组织名,公司网址的反写 + 项目名称
-DartifactId: 项目名-模块名
-DarchetypeArtifactId: 指定 ArchetypeId,
    maven-archetype-quickstart,创建一个简单的 Java 应用
-DinteractiveMode: 是否使用交互模式
# 编译源码
mvn compile
# 编译测试代码
mvn test-compile
# 运行测试
mvn test
# 产生site
mvn site
# 打包
mvn package
# 本地Repository 中安装jar
mvn install
# 清除产生的项目
mvn clean
# 生成eclipse项目
mvn eclipse:eclipse
# 生成idea项目
mvn idea:idea
# 只打包不测试
mvn -Dtest package
# 只打包jar
mvn jar:jar
# 只测试不编译也不编译测试
mvn test -skipping compile -skipping test-compile

Version

X.Y.Z-里程碑

  1. X 大版本
  2. Y 小版本 修改 bug,增加功能
  3. Z 更新
  4. 里程碑
  • SNAPSHOT 快照,开发版
  • alpha 内部测试
  • beta 公开测试
  • Release | RC 发布版 release condidate
  • GA 正常版本

坐标

groupId 组织名

artifactId 项目名

version 版本号

packaging 打包方式 默认 jar

classifier 文档和源代码

仓库

1、本地仓库

Mac 下默认仓库位置

~/.m2/repository

2、远程仓库

(1)中央仓库

https://mvnrepository.com/

(2)私服

Nexus

(3)公共库

使用阿里云仓库

<mirrors>
    <mirror>
      <id>alimaven</id>
      <name>aliyun maven</name>
      <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
      <mirrorOf>central</mirrorOf>
    </mirror>
</mirrors>

依赖范围

Compile 编译、测试、运行 默认

Test 测试 eg: junit

Provided 编译、测试 eg: Servlet-API

Runtime 测试、运行 eg: jdbc

System 系统范围,一般不用

依赖冲突

1、第一声明者优先

2、路径最近的优先

3、排除依赖

 <dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-jdbc</artifactId>
    <version>5.2.6.RELEASE</version>
    <exclusions>
        <exclusion>
            <groupId></groupId>
            <artifactId></artifactId>
        </exclusion>
    </exclusions>
</dependency>

聚合打包

继承

相关文章
|
Java 数据库连接 Maven
Java学习路线-66:Maven
Java学习路线-66:Maven
116 0
|
XML Java 数据库连接
Java学习路线-63:maven整合ssm-spring+struts+mybatis
Java学习路线-63:maven整合ssm-spring+struts+mybatis
53 0
|
Java 数据库连接 Maven
Java学习路线-66:Maven
Java学习路线-66:Maven
|
22天前
|
Java 开发者
Java多线程编程中的常见误区与最佳实践####
本文深入剖析了Java多线程编程中开发者常遇到的几个典型误区,如对`start()`与`run()`方法的混淆使用、忽视线程安全问题、错误处理未同步的共享变量等,并针对这些问题提出了具体的解决方案和最佳实践。通过实例代码对比,直观展示了正确与错误的实现方式,旨在帮助读者构建更加健壮、高效的多线程应用程序。 ####
|
13天前
|
设计模式 Java 开发者
Java多线程编程的陷阱与解决方案####
本文深入探讨了Java多线程编程中常见的问题及其解决策略。通过分析竞态条件、死锁、活锁等典型场景,并结合代码示例和实用技巧,帮助开发者有效避免这些陷阱,提升并发程序的稳定性和性能。 ####
|
11天前
|
存储 监控 小程序
Java中的线程池优化实践####
本文深入探讨了Java中线程池的工作原理,分析了常见的线程池类型及其适用场景,并通过实际案例展示了如何根据应用需求进行线程池的优化配置。文章首先介绍了线程池的基本概念和核心参数,随后详细阐述了几种常见的线程池实现(如FixedThreadPool、CachedThreadPool、ScheduledThreadPool等)的特点及使用场景。接着,通过一个电商系统订单处理的实际案例,分析了线程池参数设置不当导致的性能问题,并提出了相应的优化策略。最终,总结了线程池优化的最佳实践,旨在帮助开发者更好地利用Java线程池提升应用性能和稳定性。 ####
|
13天前
|
缓存 Java 开发者
Java多线程编程的陷阱与最佳实践####
本文深入探讨了Java多线程编程中常见的陷阱,如竞态条件、死锁和内存一致性错误,并提供了实用的避免策略。通过分析典型错误案例,本文旨在帮助开发者更好地理解和掌握多线程环境下的编程技巧,从而提升并发程序的稳定性和性能。 ####
|
6天前
|
安全 算法 Java
Java多线程编程中的陷阱与最佳实践####
本文探讨了Java多线程编程中常见的陷阱,并介绍了如何通过最佳实践来避免这些问题。我们将从基础概念入手,逐步深入到具体的代码示例,帮助开发者更好地理解和应用多线程技术。无论是初学者还是有经验的开发者,都能从中获得有价值的见解和建议。 ####
|
6天前
|
Java 调度
Java中的多线程编程与并发控制
本文深入探讨了Java编程语言中多线程编程的基础知识和并发控制机制。文章首先介绍了多线程的基本概念,包括线程的定义、生命周期以及在Java中创建和管理线程的方法。接着,详细讲解了Java提供的同步机制,如synchronized关键字、wait()和notify()方法等,以及如何通过这些机制实现线程间的协调与通信。最后,本文还讨论了一些常见的并发问题,例如死锁、竞态条件等,并提供了相应的解决策略。
24 3
|
7天前
|
监控 Java 开发者
深入理解Java中的线程池实现原理及其性能优化####
本文旨在揭示Java中线程池的核心工作机制,通过剖析其背后的设计思想与实现细节,为读者提供一份详尽的线程池性能优化指南。不同于传统的技术教程,本文将采用一种互动式探索的方式,带领大家从理论到实践,逐步揭开线程池高效管理线程资源的奥秘。无论你是Java并发编程的初学者,还是寻求性能调优技巧的资深开发者,都能在本文中找到有价值的内容。 ####