Maven 仓库分类:
1、本地仓库
默认为:C:\Users******.m2\repository
也可以设置其他位置。方式同上。
此时配置的maven的本地仓库是属于用户范围的,也可以配置全局的本地仓库(不推荐)
2、远程仓库
又可以分为:
2.1、中央仓库(一般不会用,会被其他远程仓库覆盖掉)
配置:这个配置是maven默认配置的!
< repositories >
< repository >
< id >central</ id >
< name >Maven Repository Switchboard</ name >
< layout >default</ layout >
< url >http://repo1.maven.org/maven2</ url >
< snapshots >
< enabled >false</ enabled >
</ snapshots >
</ repository >
</ repositories >
这里我们只要知道,中央仓库的id为central,远程url地址为http://repo1.maven.org/maven2,它关闭了snapshot版本构件下载的支持。
2.2、私服–Nexus仅仅是私服的一种。
配置语句:
<id>nexus</id>
<repositories><!--配置远程仓库-->
<repository>
<id>nexus2</id>
<name>Nexus</name>
<url>http://192.*.**:8081/nexus/content/groups/public/</url>
<releases><!-- 控制Maven对于发布版本构件的下载权限 -->
<enabled>true</enabled>
</releases>
<snapshots><!-- 控制Maven对于快照版本构件的下载权限 -->
<enabled>true</enabled>
</snapshots>
</repository>
</repositories>
对于releases和snapshots来说,除了enabled,它们还包含另外两个子元素updatePolicy和checksumPolicy。
updatePolicy:配置Maven从远处仓库检查更新的频率,默认值是daily,Maven每天检查一次。其他可用的值包括:never-从不检查更新;always-每次构建都检查更新;interval:X-每隔X分钟检查一次更新(X为任意整数)。
checksumPolicy:配置Maven检查校验和文件的策略。当构件被部署到Maven仓库中时,会同时部署对应的检验和文件。在下载构件的时候,Maven会验证校验和文件,如果校验和验证失败:当checksumPolicy的值为默认的warn时,Maven会在执行构建时输出警告信息;fail-Maven遇到校验和错误就让构建失败;ignore-使Maven完全忽略校验和错误。
<pluginRepositories><!--配置Maven从什么地方下载插件构件-->
<pluginRepository>
<id>nexus2</id>
<name>Nexus</name>
<url>http://192.*.2.*:8081/nexus/content/groups/public/</url>
<releases><enabled>true</enabled></releases>
<snapshots><enabled>true</enabled> </snapshots>
</pluginRepository>
</pluginRepositories>
一个局域网的远程仓库,使用该仓库能大大提高下载速度,继而提高构建速度;也有可能你依赖的一个jar在central中找不到,它只存在于某个特定的公共仓库,这样你也不得不添加那个远程仓库的配置
不是简单的将及元素复制到settings.xml中就可以,setting.xml不直接支持这两个元素。解决方案,就是利用profile
配置如下:
< profiles >
< profile >
< id >nexus</ id >
<!-- repositories and pluginRepositories here-->
</ profile >
</ profiles >
< activeProfiles > <!--激活 远程仓库-->
< activeProfile >nexus</ activeProfile >
</ activeProfiles >
使用profile为settings.xml添加仓库提供了一种用户全局范围的仓库配置。
mirror镜像:
作用:有一个速度更快的Central镜像,或者你想覆盖central仓库配置,或者你想为所有POM使用唯一的一个远程仓库(这个远程仓库代理的所有必要的其它仓库),你可以使用settings.xml中的mirror配置。
关于镜像的一个更为常见的用法是结合私服。由于私服可以代理任何外部的公共仓库(包括中央仓库),因此,对于组织内部的Maven用户来说,使用一个私服地址就等于使用了所有需要的外部仓库,这可以将配置集中到私服,从而简化Maven本身的配置。在这种情况下,任何需要的构件都可以从私服获得,私服就是所有仓库的镜像
mirrorOf的值为central,表示该配置为中央仓库的镜像,任何对于中央仓库的请求都会转至该镜像,用户也可以使用同样的方法配置其他仓库的镜像
配置如下:
<mirrors>
<mirror><!--配置镜像-->
<id>nexus</id>
<name>Nexus</name>
<url>http://192.*.*.233:8081/nexus/content/groups/public/</url>
<mirrorOf>*</mirrorOf> <!mirrorOf的值为星号,表示该配置是所有Maven仓库的镜像,任何对于远程仓库的请求都会被转至url -->
</mirror>
</mirrors>
注:
1、如果访问该仓库需要验证,则配置一个id为nexus的认证信息即可
2、需要注意的是,由于镜像仓库完全屏蔽了被镜像仓库,当镜像仓库不稳定或者停止服务的时候,Maven仍将无法访问被镜像仓库,因而将无法下载构件。
2.3、其他公共库
mvn install 会将项目生成的构件安装到本地Maven仓库 ,构件只能供当前用户使用
mvn deploy 用来将项目生成的构件分发到远程Maven仓库 ,所有能访问该仓库的用户都能使用你的构件
1、需要配置POM.xml 的distributionManagement 来指定Maven分发构件的位置:
<distributionManagement>
<repository> <!--发布版本(稳定版本)构件的仓库 -->
<id>nexus-releases</id>
<name>Local Nexus Repository</name>
<url>http://192.168.2.233:8081/nexus/content/repositories/releases/</url>
</repository>
<snapshotRepository> <!-- 表示快照版本(开发测试版本)的仓库 -->
<id>nexus-snapshots</id>
<name>Local Nexus Repository</name>
<url>http://192.168.2.233:8081/nexus/content/repositories/snapshots</url>
</snapshotRepository>
</distributionManagement>
注:如果缺失,会报下述错误
(repository element was not specified in the POM inside distributionManagement element):
Failed to execute goal org.apache.maven.plugins:maven-deploy-plugin:2.7:deploy (default-deploy) on project vivo-paradise:
Deployment failed: repository element was not specified in the POM inside distributionManagement element or in -DaltDeploymentRepository=id::layout::url parameter -> [Help 1]
2、分发构件到远程仓库需要认证,如果你没有配置任何认证信息,你往往会得到401错误。这个时候,如下在settings.xml中配置认证信息:
</servers>
<server>
<id>nexus-releases</id> <!-- 这里的id必须要和pom文件中的id完全一致!见上面distributionManagement配置-->
<username>admin</username>
<password>admin123456</password>
</server>
<server>
<id>nexus-snapshots</id> <!-- 这里的id必须要和pom文件中的id完全一致!见上面distributionManagement配置-->
<username>admin</username>
<password>admin123456</password>
</server>
</servers>
maven打包 install package deploy区别
【】maven package:打包到本项目,仅仅放在项目target目录下。如果a项目依赖于b项目,打包b项目时,只会打包到b项目下target下,编译a项目时就会报错。
【】maven install:打包(安装)到本地仓库,将包安装至本地仓库,以让其它项目依赖。 如果a项目依赖于b项目,那么install b时,会在本地仓库同时生成pom文件和jar文件,
可以看install b的日志:
[INFO] --- maven-install-plugin:2.4:install (default-install) @ vivo-paradise-core ---
[INFO] Installing E:\git-file\backend-web\vivo-paradise-core\target\vivo-paradise-core-1.0-SNAPSHOT.jar to C:\Users\11065394\.m2\repository\com\vivo\paradise\vivo-paradise-core\1.0-SNAPSHOT\vivo-paradise-core-1.0-SNAPSHOT.jar
[INFO] Installing E:\git-file\backend-web\vivo-paradise-core\pom.xml to C:\Users\11065394\.m2\repository\com\vivo\paradise\vivo-paradise-core\1.0-SNAPSHOT\vivo-paradise-core-1.0-SNAPSHOT.pom
所以:package与deploy的区别是:
package是把jar打到本项目的target下;
install时把jar包放在target下并且把jar安装到本地仓库,供其他项目使用.
【问题】使用root下的package打包,发现没有把各个项目生成的jar放在本地仓库,但是启动intf工程依然可以正常启动!???
验证测试:
1、先package打包intf,在package打包core,同样的打包intf时出错,提示和下方相同。
2、先package打包core,在package打包intf出错,提示找不到Could not find artifact com.vivo.paradise:vivo-paradise-core:jar:1.0-SNAPSHOT in nexus (先从本地找,找不到再从远程仓库nexus查找,还是找不到报错)
3、采用root下的package打包,与使用install的唯一区别是install会多一个把包放到本地仓库的过程
因为根pom.xml 有各个工程关联信息,所以package打包可以直接把依赖工程包带进去(或者解释为当成一个大工程进行打包),而如果单独的对intf和core打包,因为两个工程下的pom文件没有对应依赖关系,所以单独打包intf需要依赖core的jar
【】maven deploy:打包上传(部署)到远程仓库,如:私服nexus等,需要配置pom文件。将最终的包复制到远程的仓库,以让其它开发人员与项目共享。
Clean Lifecycle 在进行真正的构建之前进行一些清理工作:
pre-clean 执行一些需要在clean之前完成的工作
clean 移除所有上一次构建生成的文件
post-clean 执行一些需要在clean之后立刻完成的工作
maven项目对象的部分方法:
①mvn compile 编译项目
②mvn package 打包项目
③mvn clean 清除之前编译和打包产生的文件
④mvn install 将项目安装到本地仓库
⑤mvn test 运行测试代码
mvn clean package包含的执行步骤:
执行顺序:
1、使用清理插件:maven-clean-plugin:2.5执行清理删除已有target目录(版本2.5),但是不会删除已经放在本地仓库的jar包;
2、使用资源插件:maven-resources-plugin:2.6执行资源文件的处理(版本2.6);
3、使用编译插件:maven-compiler-plugin:3.1编译所有源文件生成class文件至target\classes目录下(版本3.1);
4、使用资源插件:maven-resources-plugin:2.6执行测试资源文件的处理(版本2.6);
5、使用编译插件:maven-compiler-plugin:3.1编译测试目录下的所有源代码(版本3.1);
6、使用插件:maven-surefire-plugin:2.12运行测试用例(版本2.12);
7、使用插件:maven-jar-plugin:2.4对编译后生成的文件进行打包,包名称默认为:artifactId-version,比如本例生成的jar文件:rtp-front-1.0-SNAPSHOT,包文件保存在target目录下(这个生成的包不能在命令行中直接执行,因为我们还没有入口类配置到Manifest资源配置文件中去,后续会阐述)。
如果工作空间同时引进maven项目A、B,A项目依赖B项目,这时看maven引入的jar包以文件夹形式展示,关闭了项目B就会以jar包形式显示(重新从私服上拉取)。
总之如果依赖的项目在本地,项目会优先在本地查找。
来源:CSDN
作者:yang100yang100
链接:https://blog.csdn.net/yang100yang100/article/details/90216067