| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> Java知识库 -> Maven还停留在导jar包?快来探索Nexus私服的新世界 -> 正文阅读 |
|
[Java知识库]Maven还停留在导jar包?快来探索Nexus私服的新世界 |
写在前面Maven,学习框架之前我们都会接触到的一个工具,感觉他的定位,似乎就跟git一样,只是方便我们开发?于是自然而然的,很多小猿对于Maven都只是停留在会用的阶段,利用他来构建,打包,引入jar包。 而实际上呢,Maven还有很多强大的地方,多模块开发,私服等等也是需要我们掌握的,在实际的开发中,往往是多模块共同开发,特别是我们之前提及的Dubbo分布式开发中,多模块开发是重中之重! 传统项目开发导jar包
比如String的getByte方法,在两个系统上得到的结果是不一样的,如果?没有重新编译运行?,那最终也会有偏差 Maven概念POMProject Object Model
Maven作用项目构建和管理提供一套自动化构建项目的方法.并且通用,兼容性好,跨平台
构建是面向过程的,就是一些步骤,完成项目代码的编译,测试,运行,打包,部署等等。 maven支持的构建包括有: 1.?清理?, 把之前项目编译的东西删除掉,我新的编译代码做准备。 2.?编译?, 把程序源代码编译为执行代码, java-class文件
3.?测试?, maven可以执行测试程序代码,验证你的功能是否正确。 4.?报告?, 生成测试结果的文件, 测试通过没有。 5.?打包?, 把你的项目中所有的class文件,配置文件等所有资源放到一个压缩文件中。
6.?安装?, 把5中生成的文件jar,war安装到本地仓库供别的文件使用 7.?部署?, 把程序安装好可以执行。 这些在下边的生命周期其实刚刚好体现出来 依赖管理
统一开发结构--约定大于配置即能进行配置的不要去编码指定,能事先约定规则的不要去进行配置。这样既减轻了劳动力,也能防止出错。
坐标仓库私服(下文中会有具体实例)下载顺序??先在本地仓库找,找不到就去私服找,如果私服没有,则会到中央仓库下载?到私服?并且发送到本地仓库 无论如何都还是最终会下到本地,区别只是从哪发送到本地而已?
图源?Maven访问仓库顺序是什么 - 开发技术 - 亿速云 镜像仓库配置mirrorOf对哪种仓库进行镜像 手工mavenMaven工程目录结构 ? 构建命令Maven构建命令使用mvn开头,后面加功能参数,可以一次执行多个命令,使用空格分隔 clean把编译的去掉,target文件目录删除掉 install把你的当前项目安装到本地仓库,成为一个jar包供别的项目引用?里边的类?等 package会先compile,然后再clean ? 依赖管理依赖传递依赖具有传递性,包括直接传递和间接传递。 直接传递:在当前项目中通过依赖配置建立的依赖关系(A使用B,A和B就是直接传递) 间接传递:如果A依赖B,而B依赖C,那么A和C之间就是间接传递 冲突原则路径优先在越浅层的优先级越高 声明优先在同一层,先声明的比较高 在同一个pom中配置了相同资源的不同版本后配置的覆盖前边的 可选依赖排除依赖①手动排除依赖,,且2可以直接把3整个依赖进来,再排除掉特定的②借助idea插件排除依赖 -- Maven Helper打开pom文件,下方就可以选择切换查看方式 右键选中你需要排除的 Exclude即可 ③版本锁定--?(待补充实例,拿Dubbo的吧)Dubbo的GitHub文档中应用到了这点 <properties> <spring-boot.version>2.3.0.RELEASE</spring-boot.version> <dubbo.version>2.7.8</dubbo.version> </properties> <dependencyManagement> <dependencies> <!-- Spring Boot --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-dependencies</artifactId> <version>${spring-boot.version}</version> <type>pom</type> <scope>import</scope> </dependency> <!-- Apache Dubbo --> <dependency> <groupId>org.apache.dubbo</groupId> <artifactId>dubbo-dependencies-bom</artifactId> <version>${dubbo.version}</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement> <dependencies> <!-- Dubbo Spring Boot Starter --> <dependency> <groupId>org.apache.dubbo</groupId> <artifactId>dubbo-spring-boot-starter</artifactId> <version>2.7.8</version> </dependency> </dependencies> dependencyManagement
管理通用性
可扩展性
依赖范围传递性(了解)生命周期与插件继承(SpringBoot就是一个很好的例子)作用通过继承可以实现在子工程中沿用父工程中的配置(与Java类似) 制作方式在子工程中声明其父工程坐标与对应的位置? <!--定义该工程的父工程--> <parent> <groupId> </groupId> <artifactId> </artifactId> <version> </version> <!--填写父工程的pom文件--> <relativePath>父工程pom文件地址</relativePath> </parent> 如SpringBoot中 <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.5.6</version> <relativePath/> <!-- lookup parent from repository --> </parent> ? 在父工程中定义依赖管理可以管理版本,解决子工程中依赖冲突问题(上文提及到的版本锁定) ? <!--声明此处进行依赖管理--> <dependencyManagement> <!--具体的依赖--> <dependencies> <dependency> <groupId> </groupId> <artifactId> </artifactId> <version> </version> </dependency> </dependencies> </dependencyManagement> ? 继承依赖使用:在子工程中定义依赖关系,无需声明依赖版本,版本参照父工程中依赖的版本 ? <dependencies> <dependency> <groupId> </groupId> <artifactId> </artifactId> </dependency> </dependencies> ? 聚合
建立一个空模块打包类型设置为pom<packaging>pom</packaging> 聚合module效果私服仓库分类
保存那些无法从中央仓库直接获取的资源,比如说我们自己研发的一些项目,或者一些第三方非开源项目比如oracle(要注意版权问题)
**快速搭载Nexus私服私服作用有时候我们是多台机器开发,而我们要去引用别人机器上的模块jar包时,这个时候对方单纯install也只是发布到对方电脑上的本地仓库而已,我们还是访问不到.这个时候就需要一个中间商私服,来存放一些需要?共享的资源 nexus下载安装
把这一项改为false , 才可以?用root用户开启nexus
账号默认是admin 初次登录会提示你去特定位置找密码 在该目录下寻找即可 之后可以修改默认密码 访问私服仓库(手动上传)--不推荐
这里我们创建一个宿主仓库修改快照版/发行版找到maven-public , 把我们刚创建的包含进去即可去浏览页面找到我们的仓库,手动上传idea环境上传需要配置两个地方
? ? 上传jar认证配置上传jar包需要?认证?,maven的认证是在.m2/settings.xml或自己的的maven里?settings.xml?中servers标签下配置的. 这里特别说明一下,servers配置的ID很关键,这个与你项目里面的?distrubtionManagement?下配置的仓库ID一致,否则会报审核未通过的错误。 <!-- 配置访问服务器的权限--> <server> <id>nexus-Melo</id> <username>admin</username> <password>admin</password> </server> <server> <id>Melo-Release</id> <username>admin</username> <password>admin</password> </server> <server> <id>Melo-Snapshots</id> <username>admin</username> <password>admin</password> </server> 这里的id对应了setting.xml里配置的server.id信息,?name?任取 <!-- 私服发布管理--> <distributionManagement> <repository> <!-- id要跟setting中配置访问时的id一致--> <id>Melo-Release</id> <!-- 仓库地址 去nexus网站找到仓库复制url即可 --> <url>http://ip地址:端口/repository/Melo-Release/</url> </repository> <snapshotRepository> <id>Melo-Snapshots</id> <url>http://ip地址:端口/repository/Melo-Snapshot/</url> </snapshotRepository> </distributionManagement> 上传效果idea环境从私服获取(同时使用阿里云镜像+私服)
建议使用自带的maven-public仓库组 , 然后把我们?自己创建的仓库?包含进去 注意不要把proxy类的仓库包含进我们的group!这样我们配置的阿里云镜像就失效了除非自己去手动改proxy代理的仓库地址,但个人感觉不太推荐,具体见后文"另外的实现方式" 配置server--访问服务器的权限包含拉取和上传的两部分配置,两部分都需要权限 <!-- 配置访问服务器的权限--> <!--第一个id要和下面的mirror中的id一致,代表拉取时也需要进行身份校验--> <server> <id>nexus-Melo</id> <username>你的私服账号</username> <password>你的私服密码</password> </server> <!-- 下边是我们上传时的访问配置,id对应你上传时<distributionManagement>中写的id--> <server> <id>Melo-Release</id> <username>你的私服账号</username> <password>你的私服密码</password> </server> <server> <id>Melo-Snapshots</id> <username>你的私服账号</username> <password>你的私服密码</password> </server> 配置mirror<!-- 阿里云私服,拿中央仓库--> <mirror> <id>alimaven</id> <name>aliyun maven</name> <url>http://maven.aliyun.com/nexus/content/groups/public/</url> <!-- 访问中央仓库才使用阿里云镜像--> <mirrorOf>central</mirrorOf> </mirror> <!-- 自己的maven私服--> <mirror> <id>nexus-Melo</id> <!--镜像名称 --> <name>nexus-Melo</name> <!--镜像除了中央仓库以外的仓库(本地有的话还是优先本地,没有再去私服找,私服没有的话会先通过阿里云下载到私服,再发送到本地)--> <mirrorOf>!central</mirrorOf> <!--该镜像的URL。构建系统会优先考虑使用该URL,而非使用默认的服务器URL。 选择你用哪个私服仓库来作为镜像,建议选择自带的maven-public,具体看上边 --> <url>http://ip地址:端口/repository/maven-public/</url> </mirror> 扩展--mirrorOf *表示所有 !表示非 ,!repo1 : 在除了repo1的仓库中寻找 external: : 刚好跟上边的 !internal.repo,* 相反 扩展--mirror**
? 正确的操作是在profiles节点下配置多个profile,而且配置之后?要激活!!!! 配置profile<!-- 阿里云--> <profile> <id>aliyun</id> <repositories> <repository> <id>aliyun</id> <url>http://maven.aliyun.com/nexus/content/groups/public/</url> <releases> <enabled>true</enabled> </releases> <snapshots> <enabled>true</enabled> <updatePolicy>always</updatePolicy> </snapshots> </repository> </repositories> </profile> <!-- 自己的私服--> <profile> <!-- 注意这个id,下边激活的时候会用到,要一一对应--> <id>nexus-pr</id> <!-- 远程仓库列表 --> <repositories> <repository> <!-- 上边要拉取的仓库id--> <id>nexus-Melo</id> <name>nexus-Melo</name> <!-- 虚拟的URL形式,指向镜像的URL--> <url>http://ip地址:端口/repository/maven-public/</url> <layout>default</layout> <!-- 表示可以从这个仓库下载releases版本的构件--> <releases> <enabled>true</enabled> </releases> <!-- 表示可以从这个仓库下载snapshot版本的构件 --> <snapshots> <enabled>true</enabled> </snapshots> </repository> </repositories> <!-- 暂时还没有自定义插件的需求 --> <!-- 插件仓库列表 --> <!-- <pluginRepositories>--> <!-- <pluginRepository>--> <!-- <!– 上边要拉取的仓库id–>--> <!-- <id>nexus-Melo</id>--> <!-- <name>nexus-Melo</name>--> <!-- <url>http://114.132.235.87:9001/repository/maven-public/</url>--> <!-- <layout>default</layout>--> <!-- <snapshots>--> <!-- <enabled>true</enabled>--> <!-- </snapshots>--> <!-- <releases>--> <!-- <enabled>true</enabled>--> <!-- </releases>--> <!-- </pluginRepository>--> <!-- </pluginRepositories>--> </profile> 激活profile!!<!--对应上边profile定义的id!!!--> <!-- 激活阿里云--> <activeProfile>aliyun</activeProfile> <!-- 激活nexus--> <activeProfile>nexus-pr</activeProfile> <activeProfile>jdk-1.8</activeProfile> 实现阿里云与私服共存的效果那些中央仓库有的文件,就会?走阿里云镜像?去下载,如果是我们自定义的jar包(中央仓库没有的),就会?走我们的私服?去下载! 另外的实现方式
写在最后
|
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/23 23:50:53- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |