文章目录
基础
概念
概念
Maven 是一个项目管理工具,可以对 Java 项目进行自动化的构建和依赖管理。
Maven是java项目管理工具,用于管理java依赖,用于编译、打包以及发布java项目。
它包含:项目对象模型(POM,Project Object Model)、项目生命周期(Project Lifecycle)、依赖管理系统(Dependency Management System)和各种插件。插件主要用来实现生命周期各个阶段(phase)的目标(goal)。
对Maven需要掌握:使用Maven构建项目、排查并调解项目依赖冲突。
作用
编译代码
项目打包
实现项目模块化
在线管理依赖,项目依赖很方便获取
提供了一些丰富的插件,方便项目持续集成
常见命令
命令 | 说明 |
---|---|
mvn install | 打包好的jar包会安装到本地的maven仓库 |
mvn archetype:generate | 创建工程架构的模板 可以用来创建maven项目 |
mvn test | 运行测试 |
mvn package | 打包 |
mvn complie | 用于编译源代码 |
IDEA配置Maven
概述
IDEA 默认的插件Maven 版本是3.6.1 自己使用的IDEA 版本是19.3.3
maven项目打包以及发布
学习参考:https://blog.csdn.net/qq_40547893/article/details/110091275
clean命令
清除由项目编译创建的target
validate命令
验证项目是否正确并且所有必要的信息均可用
compile命令
编译项目的源代码
test命令
使用合适的单元测试框架来测试编译的源代码。 这些测试不应要求将代码打包或部署
verify命令
对集成测试的结果进行任何检查,以确保符合质量标准
package命令
完成了项目编译、单元测试、打包功能,但没有把打好的可执行jar包(war包或其它形式的包)布署到本地maven仓库和远程maven私服仓库
install命令
完成了项目编译、单元测试、打包功能,同时把打好的可执行jar包(war包或其它形式的包)布署到本地maven仓库,
但没有布署到远程maven私服仓库
deploy命令
完成了项目编译、单元测试、打包功能,同时把打好的可执行jar包(war包或其它形式的包)布署到本地maven仓库和远程maven私服仓库
**package,install,deploy三者关联**
mvn clean package依次执行了clean、resources、compile、testResources、testCompile、test、jar(打包)等7个阶段。
mvn clean install依次执行了clean、resources、compile、testResources、testCompile、test、jar(打包)、install等8个阶段。
mvn clean deploy依次执行了clean、resources、compile、testResources、testCompile、test、jar(打包)、install、deploy等9个阶段。
site命令
用于为Maven项目生成站点(用以生成HTML页面的模块等文档)
pom.xml
scope标签
<scope>xxx<scope>
xxx的内容有5种类型;
compile(编译范围):
默认配置,表示被依赖项目需要参与当前项目的编译;
test(测试范围):
表示依赖项目仅仅参与测试相关的工作;
runntime(运行时范围):
表示被依赖项目无需参与项目的编译,后期的测试和运行周期需要参与;
provided(已提供范围):
表示打包的时候可以不用包进去,别的实施(Web Container)会提供;
system(系统范围):
与provided类似,但必须显式提供一个基于本地系统中JAR文件的路径,目的是为了允许基于本地对象编译;
Gradle
定义:
Gradle 提供了强大的依赖管理、灵活的构建配置和高效的构建过程,使项目构建变得更加简单、可维护和可扩展。
实战
普通java项目变成maven项目
参考博客:https://www.cnblogs.com/liuyitan/p/13214886.html
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>com.isoftstone.core</groupId>
<artifactId>isc</artifactId>
<packaging>war</packaging>
<version>1.0.0-SNAPSHOT</version>
<name>xxxx</name>
<dependencies>
<dependency>
<groupId>org.dom4j</groupId>
<artifactId>dom4j</artifactId>
<version>2.1.0</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.47</version>
</dependency>
<dependency>
<groupId>org.jsoup</groupId>
<artifactId>jsoup</artifactId>
<version>1.8.3</version>
</dependency>
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.10.1</version>
</dependency>
<dependency>
<groupId>com.vaadin.external.google</groupId>
<artifactId>android-json</artifactId>
<version>0.0.20131108.vaadin1</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-api</artifactId>
<version>2.21.1</version>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
<dependency>
<groupId>com.cmbchina.ccd</groupId>
<artifactId>general-crypto-toolkit-openSDK</artifactId>
<version>1.0.4.RELEASE</version>
</dependency>
<dependency>
<groupId>cn.com.infosec</groupId>
<artifactId>isec-func</artifactId>
<version>jdk1.6-2.0.1.1</version>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.14.0</version>
</dependency>
<dependency>
<groupId>commons-httpclient</groupId>
<artifactId>commons-httpclient</artifactId>
<version>3.1</version>
</dependency>
<dependency>
<groupId>org.apache.httpcomponents.core5</groupId>
<artifactId>httpcore5</artifactId>
<version>5.2.4</version>
</dependency>
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpcore</artifactId>
<version>4.4.16</version>
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter</artifactId>
<version>RELEASE</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>org.testng</groupId>
<artifactId>testng</artifactId>
<version>7.0.0</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.15.1</version>
</dependency>
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
<version>4.5.14</version>
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-api</artifactId>
<version>5.10.2</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
</dependency>
<dependency>
<groupId>org.mozilla</groupId>
<artifactId>rhino</artifactId>
<version>1.7.14</version>
</dependency>
<dependency>
<groupId>cn.com.infosec</groupId>
<artifactId>isec-jce</artifactId>
<version>jdk1.6-2.0.1.1</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.17.0</version>
</dependency>
<dependency>
<groupId>org.apache.httpcomponents.client5</groupId>
<artifactId>httpclient5</artifactId>
<version>5.3.1</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>5.2.5</version> <!-- 替换为实际的POI版本号,如5.2.3 -->
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>5.2.5</version>
</dependency>
<dependency>
<groupId>org.apache.xmlbeans</groupId>
<artifactId>xmlbeans</artifactId>
<version>5.2.1</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.30</version>
</dependency>
</dependencies>
<build>
<finalName>isc</finalName>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.1</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
</plugins>
</build>
</project>
问题解决
配置cat服务
问题描述:
com.dianping.cat:cat-client:pom:unknown failed to transfer from http://0.0.0.0/ during a previous attempt. This failure was cached in the local repository and resolution is not reattempted until the update interval of maven-default-http-blocker has elapsed or updates are forced. Original error: Could not transfer artifact com.dianping.cat:cat-client:pom:unknown from/to maven-default-http-blocker (http://0.0.0.0/): Blocked mirror for repositories: [ali (http://maven.aliyun.com/nexus/content/groups/public/, default, releases)]
无法访问 Maven 3.8.1 http 仓库。
解决:
<dependency>
<groupId>com.dianping.cat</groupId>
<artifactId>cat-client</artifactId>
<version>3.1.0</version>
</dependency>
// 给依赖项增加version即可,最初没有新增version
import包和真实包路径不同
描述:
依赖包的位置是:\responsitory\cxx\uxx\Qx\qh_xxx\0.0.1-SNAPSHOT
代码中引入的代码是:import com.uxxx.bxxx.log.Mxxx;
分析:
由于 Maven 仓库的结构 或 项目配置 的问题导致的;
// 后续新增;
maven实现deploy
在maven所在文件夹,conf--setting.xml--servers标签中
增加如下内容:
<server>
<id>与maven配置文件pom中responsitry的id一致</id>
<username>用户名</username>
<password>密码</password>
</server>
如果出现修改后不起作用的情况;
需要修改c:/用户/xxx/.m2/setting.xml 文件中的servers标签,添加上述内容。