Maven这个单词来自于意第绪语(犹太语),意为知识的积累。
Maven项目对象模型(POM),可以通过一小段描述信息来管理项目的构建,报告和文档的项目管理工具软件。
Maven 除了以程序构建能力为特色之外,还提供高级项目管理工具。由于 Maven 的缺省构建规则有较高的可重用性,所以常常用两三行 Maven 构建脚本就可以构建简单的项目。由于 Maven 的面向项目的方法,许多 Apache Jakarta 项目发文时使用 Maven,而且公司项目采用 Maven 的比例在持续增长。
访问网站 https://maven.apache.org
打开conf\settings.xml文件
配置本地仓库的位置
<localRepository> 本地地址 <localRepository>
<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd">
<localRepository>C:\maven-repositorylocalRepository>
由于中央仓库在境外,网络访问不稳定,故在开发过程中大多配置中央仓库的镜像仓库。
<mirror>
<id>aliyunmavenid>
<mirrorOf>centralmirrorOf>
<name>阿里云公共仓库name>
<url>https://maven.aliyun.com/repository/publicurl>
mirror>
配置maven默认使用的jdk环境。
<profile>
<id>jdk-1.8id>
<activation>
<activeByDefault>trueactiveByDefault>
<jdk>1.8jdk>
activation>
<properties>
<maven.compiler.source>1.8maven.compiler.source>
<maven.compiler.target>1.8maven.compiler.target>
<maven.compiler.compilerVersion>1.8maven.compiler.compilerVersion>
properties>
profile>
依赖Scope配置。
序列 | 依赖范围(Scope) | 对于主代码classpath有效 | 对于测试代码classpath有效 | 被打包,对于运行时classpath有效 | 案例 |
---|---|---|---|---|---|
1 | compile | yes | yes | yes | log4j |
2 | test | yes | junit | ||
3 | provided | yes | yes | servlet-api | |
4 | runtime | yes | JDBC Driver Implementtion |
访问官网: https://help.sonatype.com/repomanager3/product-information/download
由于网络不稳定,下载问题,我选择其它版本nexus-3.40.1-01-unix.tar.gz
解压nexus-3.40.1-01-unix.tar.gz
tar -zxvf nexus-3.40.1-01-unix.tar.gz
根据自己机器内存大小,适当配置内存。内存太小未来启动nexus会失败。
vim nexus.vmoptions
默认端口为8081,如果需要在要在文件中配置端口。(如果不需改端口,此处可以忽略)
运行命令**./nexus start**
检查系统开放的端口号
firewall-cmd --list-ports
添加8081端口
firewall-cmd --zone=public --add-port=端口号/tcp --permanent
重新加载防火墙
firewall-cmd --reload
在浏览器中输入http://102.168.0.101:8081
maven-releases (Version policy=Release)默认只允许上传不带SNAPSHOT版本尾缀的包,默认部署策略是Disable redeploy 不允许重复上传相同版本号信息的jar,避免包版本更新以后使用方无法获取到最新的包。
maven-snapshots (Version policy=Snapshot)只允许上传带SNAPSHOT版本尾缀的包,默认部署策略是Allow redeploy,允许重复上传相同版本号信息的jar,每次上传的时候会在jar的版本号上面增加时间后缀信息。
maven-central 中央仓库的拷贝,如果环境可以访问中央仓库,则可以获取到相关的包,否则没用
maven-public 仓库组,不是实际个一个仓库地址,只是将现有的组合到一次,可以通过它看到所属组内全部仓库的jar信息
选择maven2(hosted)
选中maven-public群组,之后访问maven-public就可以访问自己的私有仓库了。
创建三个仓库,wnhz-repository(混合拍照&发布), wnhz-releases(发布版), wnhz-snapshots(拍照班)
照片版(测试版/开发版)
混合版
在本地仓库上传的文件夹(maven-repository)下创建一个shell脚本,命名 localrepository.sh
创建脚本
touch localrepository.sh
编辑脚本
vim localrepository.sh
#!/bin/bash
while getopts ":r:u:p:" opt; do
case $opt in
r) REPO_URL="$OPTARG"
;;
u) USERNAME="$OPTARG"
;;
p) PASSWORD="$OPTARG"
;;
esac
done
find . -type f -not -path './mavenimport\.sh*' -not -path '*/\.*' -not -path '*/\^archetype\-catalog\.xml*' -not -path '*/\^maven\-metadata\-local*\.xml' -not -path '*/\^maven\-metadata\-deployment*\.xml' | sed "s|^\./||" | xargs -I '{}' curl -u "$USERNAME:$PASSWORD" -X PUT -v -T {} ${REPO_URL}/{} ;
给脚本localrepository.sh添加执行权限
chmod +x localrepository.sh
执行以下命令
./localrepository.sh -u nexus用户名 -p nexus密码 -r 仓库地址(自定义存储混合依赖的)
./localrepository.sh -u admin -p 123 -r http://192.168.198.128:8081/repository/wnhz-repository/
在settings中配置snapshots,releases和wnhz-repository服务用户名密码
注意:id必须唯一,项目pom中引用的是这个指定id。
<servers>
<server>
<id>wnhzid>
<username>adminusername>
<password>123password>
server>
<server>
<id>wnhz-releaseid>
<username>adminusername>
<password>123password>
server>
<server>
<id>wnhz-snapshotsid>
<username>adminusername>
<password>123password>
server>
servers>
中央仓库的资源从阿里云访问,其它资源来自nexus私服。
<mirrors>
<mirror>
<id>aliyunmavenid>
<mirrorOf>centralmirrorOf>
<name>阿里云公共仓库name>
<url>https://maven.aliyun.com/repository/publicurl>
mirror>
<mirror>
<id>wnhzmavenid>
<mirrorOf>*mirrorOf>
<name>蜗牛杭州的maven私服仓库name>
<url>http://192.168.198.128:8081/repository/maven-public/url>
mirror>
mirrors>
私服访问地址从下图获取:http://192.168.198.128:8081/#browse/browse:maven-public
在项目的pom.xml文件中添加
<dependencyManagement>
<dependencies>
<dependency>
<groupId>com.alibabagroupId>
<artifactId>druid-spring-boot-starterartifactId>
<version>${project.druid.version}version>
dependency>
dependencies>
dependencyManagement>
<distributionManagement>
<snapshotRepository>
<id>wnhz-snapshotsid>
<url>http://192.168.198.128:8081/repository/wnhz-snapshots/url>
snapshotRepository>
<repository>
<id>wnhz-releasesid>
<url>http://192.168.198.128:8081/repository/wnhz-releases/url>
repository>
distributionManagement>
<repositories>
<repository>
<id>nexusid>
<url>http://192.168.198.128/repository/wnhz-repository/url>
<releases>
<enabled>trueenabled>
releases>
<snapshots>
<enabled>trueenabled>
snapshots>
repository>
repositories>
在maven中运行部署,部署(deploy)项目到私服。
继承父项目模块
<parent>
<artifactId>wnhz-bmartifactId>
<groupId>com.wnhz.bmgroupId>
<version>1.0-SNAPSHOTversion>
parent>
<modelVersion>4.0.0modelVersion>
<groupId>com.wnhz.bm.commongroupId>
<artifactId>bm-commonartifactId>
<packaging>pompackaging>
packaging配置
序列 | 参数 | 解释 |
---|---|---|
1 | pom | 表示父类型 |
2 | jar | 打包为jar包 |
3 | war | 打包为war包 |
配置项目的子模块名称
<modules>
<module>bm-common</module>
<module>bm-domain</module>
<module>bm-book</module>
</modules>
定义依赖的版本号
<properties>
<maven.compiler.source>8maven.compiler.source>
<maven.compiler.target>8maven.compiler.target>
<druid.version>1.2.18druid.version>
properties>
<dependency>
<groupId>com.alibabagroupId>
<artifactId>druid-spring-boot-starterartifactId>
<version>${druid.version}version>
dependency>
引入依赖
<dependencies>
<dependency>
<groupId>mysqlgroupId>
<artifactId>mysql-connector-javaartifactId>
dependency>
<dependency>
<groupId>com.alibabagroupId>
<artifactId>druid-spring-boot-starterartifactId>
<version>${druid.version}version>
dependency>
dependencies>
构建项目模块
<plugin>
<groupId>org.apache.maven.pluginsgroupId>
<artifactId>maven-compiler-pluginartifactId>
<version>3.8.0version>
<configuration>
<source>1.8source>
<target>1.8target>
<encoding>${project.build.sourceEncoding}encoding>
configuration>
plugin>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.pluginsgroupId>
<artifactId>maven-compiler-pluginartifactId>
<version>3.8.0version>
<configuration>
<source>1.8source>
<target>1.8target>
<encoding>${project.build.sourceEncoding}encoding>
configuration>
plugin>
<plugin>
<groupId>org.apache.maven.pluginsgroupId>
<artifactId>maven-source-pluginartifactId>
<version>2.2.1version>
<configuration>
<attach>trueattach>
configuration>
<executions>
<execution>
<phase>compilephase>
<goals>
<goal>jargoal>
goals>
execution>
executions>
plugin>
plugins>
build>
打包将jar包放到项目的更目录out下。
<build>
<plugins>
<plugin>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-maven-pluginartifactId>
<configuration>
<outputDirectory>../../outoutputDirectory>
configuration>
plugin>
plugins>
build>
部署管理,适用于依赖上传
<snapshotRepository>
<id>wnhz-snapshotsid>
<url>http://192.168.201.81:8081/repository/wnhz-snapshots/url>
snapshotRepository>
<repository>
<id>wnhz-releasesid>
<url>http://192.168.201.81:8081/repository/wnhz-releases/url>
repository>
部署依赖下载
<repositories>
<repository>
<id>nexusid>
<url>http://192.168.201.81:8081/repository/maven-public/url>
<releases>
<enabled>trueenabled>
<updatePolicy>alwaysupdatePolicy>
releases>
<snapshots>
<enabled>trueenabled>
<updatePolicy>alwaysupdatePolicy>
snapshots>
repository>
repositories>
ory/wnhz-snapshots/
wnhz-releases
http://192.168.201.81:8081/repository/wnhz-releases/
#### repositories
> 部署依赖下载
```xml
nexus
http://192.168.201.81:8081/repository/maven-public/
true
always
true
always