Maven

33次阅读

共计 193 个字符,预计需要花费 1 分钟才能阅读完成。

第 1 节 基本概念

第 2 节 maven 的安装和仓库种类

1maven 的安装

环境变量

执行一下表示 maven 安装成功

2 maven 仓库的种类和彼此的关系

maven 仓库的分类


maven 本地仓库的配置


第 3 节 maven 标准目录结构和常用命令

maven 工程的目录结构

maven 工程的运行

问题处理

第 4 节 maven 生命周期和概念模型图

第 5 节 使用骨架创建 maven 的 java 工程

第 6 节 maven 工程 servlet 实例

正文完
 0

maven

33次阅读

共计 7064 个字符,预计需要花费 18 分钟才能阅读完成。

Maven

mvn -Dmaven.test.skip=true -U clean install
mvn clean package -U (强制拉一次)
mvn archetype:create-from-project
mvn archetype:generate -DarchetypeCatalog=local
mvn dependency:tree
mvn clean package -Dmaven.test.skip=true -Ptest
认识 Maven
优势

约定优于配置
简单
测试支持
构建简单
CI
插件丰富

下载
​ https://maven.apache.org/down…
安装
​ maven-model-builder-3.6.0.jar/org/apache/maven/model
文件分析
自己的 classloader

所有自己的仓库配置

超级父 pom

配置 MVM_HOME

Windows path

Linux .bash_profile
export M2_HOME=/Users/xx/tools/apache/apache-maven-3.6.0

MAVEN_OPTS

​ 配置 setting.xml
<mirror>
<id>alimaven</id>
<name>aliyun maven</name>
<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
<mirrorOf>central</mirrorOf>
</mirror>
<mirror>
<id>ui</id>
<mirrorOf>central</mirrorOf>
<name>Human Readable Name for this Mirror.</name>
<url>http://uk.maven.org/maven2/</url>
</mirror>
<mirror>
<id>osc</id>
<mirrorOf>central</mirrorOf>
<url>http://maven.oschina.net/content/groups/public/</url>
</mirror>
<mirror>
<id>osc_thirdparty</id>
<mirrorOf>thirdparty</mirrorOf>
<url>http://maven.oschina.net/content/repositories/thirdparty/</url>
</mirror>

Pom
groupId
​ 一般是域名反写
com.zzjson

artfactId
​ 功能命名
version
​ 版本号
packaging
​ 打包方式 默认是 jar
dependencyManagement
​ 只能出现在父 pom
​ 统一版本号
​ 声明 (子 POM 里用到再引)
Dependency
​ Type 默认 jar
scope
compile
​ 默认
​ 编译(maven 编译整个项目)
​ 例如 spring-core
test
​ 测试
provided
​ 编译 例如 servlet,tomcat 已经有了
​ 打包不会打进去,相当于 compile 但是在打包阶段做了 exclude 操作
runtime
​ 运行时 例如 JDBC 驱动实现
system
​ 本地一些 jar 例如短信 jar
依赖传递
compile: 编译依赖范围,在编译,测试,运行时都需要。
test: 测试依赖范围,测试时需要。编译和运行不需要。如 Junit
runtime: 运行时依赖范围,测试和运行时需要。编译不需要。如 JDBC 驱动包
provided: 已提供依赖范围,编译和测试时需要。运行时不需要。如 servlet-api
system: 系统依赖范围。本地依赖,不在 maven 中央仓库。
第一列表示直接依赖的 scope,第一行表示间接依赖的 scope

compile
test
provided
runtime

compile
compile


runtime

test
test


test

provided
provided

provided
provided

runtime
runtime


runtime

依赖仲裁
mvn dependency:tree
如果都定义了版本,那么以最近的为准
​ 最短路径原则
​ 加载先后原则
exclusions
​ 排除包
生命周期

clean 清理项目

pre-clean 执行一些清理前需要完成的工作

clean 清理上一次构建生成的文件

post-clean 执行一些清理后需要完成的工作

default
Site

​ lifecycle/phase/goal
​ 1.A Build Lifecycle is Made Up of Phases
​ 一个生命周期由多个 phase 组成的
​ 2.A Build Phase is Made Up of Plugin Goals
​ 一个 phases 是由多个 goals 组成的
生命周期运行会从前往后

版本管理
1.0-SNAPSHOT
​ i. repository 删除
​ ii. mvn clean package -U (强制拉一次)
主版本号. 次版本号. 增量版本号 -< 里程碑版本 >
1.0.0-RELAESE
常用命令

compile
clean 删除 target/
test test case junit/testNG
package 打包

<plugins>
<plugin>
<artifactId>plugin</artifactId>
<groupId>com.zzjson</groupId>
<version>1.1</version>
<configuration>
<msg>
ddd
</msg>
<list>
<list>
d
</list>
<list>
d1
</list>
</list>
</configuration>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>myplugin</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
install 把项目 install 到 local repo
deploy 发本地 jar 发布到 remote

插件
常用插件

https://maven.apache.org/plug…
http://www.mojohaus.org/plugi…
findbugs 静态代码检查

versions 统一升级版本号

<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>versions-maven-plugin</artifactId>
<version>2.3</version>
</plugin>
http://www.mojohaus.org/versions-maven-plugin/index.html
​ mvn versions:set -DnewVersion=1.1-SNAPSHOT

source 打包源代码
<plugin>
<artifactId>maven-source-plugin</artifactId>
<version>2.3</version>
<executions>
<execution>
<id>attach-sources</id>
<phase>install</phase>
<goals>
<goal>jar-no-fork</goal>
</goals>
</execution>
</executions>
</plugin>
assembly 打包 zip、war
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<version>3.1.0</version>
<configuration>
<archive>
<manifest>
<mainClass>shuncom.dubbo.task.main.BootStrap</mainClass>
</manifest>
</archive>
<descriptorRefs>jar-with-dependencies</descriptorRefs>
</configuration>
<executions>
<execution>
<id>make-assembly</id>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
</plugin>
tomcat7
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>2.2</version>
<configuration>
<port>8080</port>
<path>/</path>
</configuration>
</plugin>
自定义插件
https://maven.apache.org/guides/plugin/guide-java-plugin-development.html
<packaging>maven-plugin</packaging>
导入依赖
<dependency>
<groupId>org.apache.maven</groupId>
<artifactId>maven-plugin-api</artifactId>
<version>3.5.0</version>
</dependency>
<dependency>
<groupId>org.apache.maven.plugin-tools</groupId>
<artifactId>maven-plugin-annotations</artifactId>
<version>3.5</version>
</dependency>
extends AbstractMojo
mvn install
参数传递
​ Profile
使用场景 dev/test/pro
setting.xml 家和公司两套
仓库
下载
​ http://books.sonatype.com/nex…
访问地址
http://lohost:8081/nexus(自带 jetty)
admin/admin123
内容配置
Type:
​ 依赖 jar 包的方式
group
​ 把 group 作为合集提供, 挨个 jar 去仓库查找
hosted
​ 本地的
​ 三方的
​ 阿里短信 jar 包
​ released
​ snapshosts
proxy
​ 当 maven dependce 本地仓库没有找到,私服也没有,则去下载,从远端下载到私服
发布
在 pom.xml 配置
<distributionManagement>
<repository>
<id>repo-mirrors</id>
<name>center-repository</name>
<url>http://uk.maven.org/maven2</url>
</repository>
<snapshotRepository>
<id>repo-mirrors</id>
<name>center-repository</name>
<url>http://uk.maven.org/maven2</url>
</snapshotRepository>
</distributionManagement>
mvn deploy
登录
​ 也需要验证用户名密码,id 需要和 pom 中一致

下载 jar 配置

配置 mirror
Profile

archetype 模版化
生成一个 archetype
mvn archetype:create-from-project
进入目录
cd /target/generated-sources/archetype
mvn install
b) 从 archetype 创建项目
mvn archetype:generate -DarchetypeCatalog=local
Profile
配置文件
<profiles>
<profile>
<id>dev</id>
<properties>
<profiles.active>dev</profiles.active>
</properties>
<activation>
<activeByDefault>false</activeByDefault>
</activation>
</profile>
<profile>
<id>prod</id>
<properties>
<profiles.active>prod</profiles.active>
</properties>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
</profile>
<profile>
<id>test</id>
<properties>
<profiles.active>test</profiles.active>
</properties>
<activation>
<activeByDefault>false</activeByDefault>
</activation>
</profile>
</profiles>
<resources>
<resource>
<directory>${basedir}/src/main/resources</directory>
<excludes>
<exclude>conf/**</exclude>
</excludes>
</resource>
<resource>
<directory>src/main/resources/conf/${profiles.active}</directory>
</resource>
</resources>
代码,指定不同的环境

Setting.xml

<profile>
<id>ali</id>
<repositories>
<repository>
<id>nexus</id>
<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
<releases>
<enabled>true</enabled>
<updatePolicy>always</updatePolicy>
<checksumPolicy>warn</checksumPolicy>
</releases>
<snapshots>
<enabled>true</enabled>
<updatePolicy>always</updatePolicy>
<checksumPolicy>fail</checksumPolicy>
</snapshots>
</repository>
</repositories>
<pluginRepositories>
<pluginRepository>
<id>nexus</id>
<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
<releases>
<enabled>true</enabled>
<updatePolicy>always</updatePolicy>
<checksumPolicy>warn</checksumPolicy>
</releases>
<snapshots>
<enabled>true</enabled>
<checksumPolicy>fail</checksumPolicy>
<updatePolicy>always</updatePolicy>
</snapshots>
</pluginRepository>
</pluginRepositories>
</profile>
<profile>
<id>external</id>
<repositories>
<repository>
<id>repo-mirrors</id>
<url>http://uk.maven.org/maven2</url>
</repository>
</repositories>
<pluginRepositories>
<pluginRepository>
<id>plugin-repo-mirror</id>
<url>http://uk.maven.org/maven2</url>
</pluginRepository>
</pluginRepositories>
</profile>

mvn clean package -Dmaven.test.skip=true -Ptest
仓库
[root@snails ~]# wget http://download.sonatype.com/nexus/3/latest-unix.tar.gz
dependencyManagement 使用能够帮助我们进行子项目的版本号管理
<dependencyManagement>
<dependencies>
<dependency>
<groupId>com.zzjson.dubbo.order</groupId>
<artifactId>order-api</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
</dependencies>
</dependencyManagement>
版本
SNAPSHOT
​ 版本会替换仓库中的 jar
release
​ 版本不会替换

正文完
 0