https://blog.csdn.net/shuzhe66/article/details/45009175 小白查看资料
https://blog.csdn.net/qicui2835/article/details/80766360 什么是maven及其优点
https://blog.csdn.net/liusong0605/article/details/25654811 maven和私服nexus之间的关系
maven简介
Maven是Java平台下的一款项目构建和依赖管理的自动化管理工具。
项目构建:将我们的源代码、配置文件变成可执行的war包或者jar包。
依赖管理:项目需要正常运行,必须依赖一些第三方的jar包,对于这些第三方的jar包的管理,可以认为就是依赖的管理。
maven的优点,来源于
1、原来的项目中需要的jar包必须手动“复制”、”粘贴” 到WEB-INF/lib 项目下,而借助Maven,可以将jar包仅
仅保存在“仓库”中,有需要使用的工程只需要“引用”这个文件,并不需要重复复制到工程中。
2、原来的项目中所需要的jar包都是提前下载好的,而Maven在联网状态下会自动下载所需要的jar包。首先在本地
仓库中找,找不到就在网上进行下载。
3、原来的项目中一个jar包所依赖的其他jar包必须手动导进来,而Maven会自动将被依赖的jar包导进来。
4、原来的项目一个项目就是一个工程,而借助Maven可以将一个项目拆分成多个工程。
5、项目非常大时,可借助Maven将一个项目拆分成多个工程,最好是一个模块对应一个工程,利于分工协作。而且模块之间还是可以发送消息的。 (该条来源于https://blog.csdn.net/sword_anyone/article/details/70571550)
相关版本查看方法:
mvn -version
Apache Maven 3.5.0 (ff8f5e7444045639af65f6095c62210b5713f426; 2017-04-04T03:39:06+08:00)
Maven home: /app/maven/apache-maven-3.5.0
Java version: 1.8.0_121, vendor: Oracle Corporation
Java home: /app/java/jdk1.8.0_121/jre
Default locale: en_US, platform encoding: UTF-8
OS name: "linux", version: "3.10.0-327.el7.x86_64", arch: "amd64", family: "unix"
git --version
go version
node -v
v6.10.2
npm -v
3.10.10
maven和nexus之间的关系:
这个问题从Maven的第二个用处说起,依赖管理,通过在Pom中指定坐标的形式将jar引入到项目中。那这个过程,要经历怎样一个流程呢?从哪里寻找jar?下载的jar放到哪里?
将这个问题顺下来,就知道nexus和maven的关系了。
从哪里找到jar?项目用到的jar又存放在哪里?这引出了仓库的概念,maven通过仓库来统一管理各种构件。Maven的仓库分为本地仓库和远程仓库。
当Maven根据坐标寻找构件时,它首先会查看本地仓库,如果本地仓库存在此构件,则直接使用;如果本地仓库不存在此构件,或者需要查看是否有更新的构件版本,Maven会去远程仓库查找,发现需要的构件之后,下载到本地仓库再使用。
到了这里,问题的答案也就出来了。
首先,Nexus是一种远程仓库,根据上段的介绍,我们已经知道远程仓库的作用。在远程仓库中,默认的是中央仓库,中央仓库是Maven核心自带的远程仓库。那就使用中央仓库不就得了吗,为什么我们要安装Nexus呢?
我们从项目实际开发来看:
1.一些无法从外部仓库下载的构件,例如内部的项目还能部署到私服上,以便供其他依赖项目使用。
2. 为了节省带宽和时间,在局域网内架设一个私有的仓库服务器,用其代理所有外部的远程仓库。当本地Maven项目需要下载构件时,先去私服请求,如果私服没有,则再去远程仓库请求,从远程仓库下载构件后,把构件缓存在私服上。这样,及时暂时没有Internet链接,由于私服已经缓存了大量构件,整个项目还是可以正常使用的。同时,也降低了中央仓库的负荷。
Nexus仅仅是私服的一种。
mvn compile与mvn install、mvn deploy的区别
- mvn compile,编译类文件
- mvn install,包含mvn compile,mvn package,然后上传到本地仓库
- mvn deploy,包含mvn install,然后,上传到私服
mvn的常用命令
1 2 3 4 5 |
|
maven Q&A
一: maven里上传缺失的lib包的操作方法是什么?
构建日志报错信息如下:
[INFO] Building hps-agent 1.0-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[WARNING] The POM for org.hyperic:sigar:jar:1.6.4 is missing, no dependency information available
[ERROR] Failed to execute goal on project hps-agent: Could not resolve dependencies for project com.ai.bdx.hpsai:hps-agent:jar:1.0-SNAPSHOT: Failure to find org.hyperic:sigar:jar:1.6.4 in http://10.1.235.73:18081/nexus/content/ was cached in the local repository, resolution will not be reattempted until the update interval of nexus has elapsed or updates are forced -> [Help 1]
[ERROR]
[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.
整个操作流程的步骤如下共3步
a:把缺失的lib包,下载到本地,上传到对应的制品库(10.1.245.19上的包:/root/.m2/repository/org/hyperic/sigar/1.6.4/sigar-1.6.4.jar)
b:登录制品库http://ip:port/artifactory/webapp/#/artifacts/browse/tree/General
选择左侧第二个菜单:artifact菜单,在左侧列表菜单的第4个:Global-Maven-Libs-Local,点右上角deploy,选择仓库,选择包,填写:groupId、artifactID,version、type、按照实际情况(和pom.xml文件中记录的保持一致)写;对org.hyperic:sigar:jar:1.6.4
groupId就是org.hyperic
artifactI:sigar
version:1.6.4
type:jar;
或者上传时,直接把文件拖拽到上传框中,几个输入参数自动输入;(注意自动输入的参数不一定正确,一定要和pom.xml文件中的对比下)
c:maven在下载包上,如果下载不到,会在本地仓库中会生成垃圾文件,登录server上,把本地的私库中的信息删除掉;
然后把40:/root/.m2/repository/org/hyperic/sigar/下的1.6.4版本包删除,重新获取;
让maven对接新仓库的方法:
只更改下面的配置文件
/var/opt/jenkins/jenkins_home/tools/hudson.tasks.Maven_MavenInstallation/maven_3.3.9_plugin/conf/settings.xml
文件中的activeProfile是之处活跃的仓库;
此外对于artifactory仓库,是不需要properties的;删除properties配置;