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
94 0
|
XML Java 数据库连接
Java学习路线-63:maven整合ssm-spring+struts+mybatis
Java学习路线-63:maven整合ssm-spring+struts+mybatis
42 0
|
Java 数据库连接 Maven
Java学习路线-66:Maven
Java学习路线-66:Maven
|
3天前
|
Java 测试技术
Java多线程的一些基本例子
【5月更文挑战第17天】Java多线程允许并发执行任务。示例1展示创建并启动两个`MyThread`对象,各自独立打印&quot;Hello World&quot;。示例2的`CounterExample`中,两个线程(IncrementThread和DecrementThread)同步地增加和减少共享计数器,确保最终计数为零。这些例子展示了Java线程的基本用法,包括线程同步,还有如Executor框架和线程池等更复杂的用例。
10 0
|
3天前
|
缓存 安全 Java
7张图带你轻松理解Java 线程安全,java缓存机制面试
7张图带你轻松理解Java 线程安全,java缓存机制面试
|
1天前
|
Java
Java一分钟之-并发编程:线程间通信(Phaser, CyclicBarrier, Semaphore)
【5月更文挑战第19天】Java并发编程中,Phaser、CyclicBarrier和Semaphore是三种强大的同步工具。Phaser用于阶段性任务协调,支持动态注册;CyclicBarrier允许线程同步执行,适合循环任务;Semaphore控制资源访问线程数,常用于限流和资源池管理。了解其使用场景、常见问题及避免策略,结合代码示例,能有效提升并发程序效率。注意异常处理和资源管理,以防止并发问题。
20 2
|
1天前
|
安全 Java 容器
Java一分钟之-并发编程:线程安全的集合类
【5月更文挑战第19天】Java提供线程安全集合类以解决并发环境中的数据一致性问题。例如,Vector是线程安全但效率低;可以使用Collections.synchronizedXxx将ArrayList或HashMap同步;ConcurrentHashMap是高效线程安全的映射;CopyOnWriteArrayList和CopyOnWriteArraySet适合读多写少场景;LinkedBlockingQueue是生产者-消费者模型中的线程安全队列。注意,过度同步可能影响性能,应尽量减少共享状态并利用并发工具类。
15 2
|
1天前
|
Java 程序员 调度
Java中的多线程编程:基础知识与实践
【5月更文挑战第19天】多线程编程是Java中的一个重要概念,它允许程序员在同一时间执行多个任务。本文将介绍Java多线程的基础知识,包括线程的创建、启动和管理,以及如何通过多线程提高程序的性能和响应性。
|
2天前
|
Java
深入理解Java并发编程:线程池的应用与优化
【5月更文挑战第18天】本文将深入探讨Java并发编程中的重要概念——线程池。我们将了解线程池的基本概念,应用场景,以及如何优化线程池的性能。通过实例分析,我们将看到线程池如何提高系统性能,减少资源消耗,并提高系统的响应速度。
12 5
|
2天前
|
消息中间件 安全 Java
理解Java中的多线程编程
【5月更文挑战第18天】本文介绍了Java中的多线程编程,包括线程和多线程的基本概念。Java通过继承Thread类或实现Runnable接口来创建线程,此外还支持使用线程池(如ExecutorService和Executors)进行更高效的管理。多线程编程需要注意线程安全、性能优化和线程间通信,以避免数据竞争、死锁等问题,并确保程序高效运行。

推荐镜像

更多