给一个网站做需求分析,wordpress 账户系统,个人网站建设实训目的,phpcms仿站目录 1.Maven的概念
1.1什么是Maven
1.2什么是依赖管理
1.3什么是项目构建
1.4Maven的应用场景 1.5为什么使用Maven
1.6Maven模型 2.初识Maven
2.1Maven安装
2.1.1安装准备 2.1.2Maven安装目录分析 2.1.3Maven的环境变量 2.2Maven的第一个项目
2.2.1按照约…目录 1.Maven的概念
1.1什么是Maven
1.2什么是依赖管理
1.3什么是项目构建
1.4Maven的应用场景 1.5为什么使用Maven
1.6Maven模型 2.初识Maven
2.1Maven安装
2.1.1安装准备 2.1.2Maven安装目录分析 2.1.3Maven的环境变量 2.2Maven的第一个项目
2.2.1按照约定创建Maven项目目录 2.2.2在项目Hello根目录建立pom.xml
2.2.3创建Hello.java文件
2.2.4创建HelloTest.java文件
2.2.5进行maven的项目操作
2.3Maven的第二个项目
2.3.1按照约定创建Maven项目目录 2.3.2在项目HelloFriend根目录建立pom.xml
2.3.3创建HelloFriend.java文件
2.3.4创建HelloFriendTest.java文件
2.3.5测试打包HelloFriend项目
2.4Maven仓库配置
2.4.1Maven仓库概念
2.4.2Maven本地仓库配置 2.5IDEA整合Maven项目
2.5.1IDEA的Maven全局配置
2.5.2IDEA创建Maven的Java项目
2.5.3IDEA创建Maven的Java web项目
2.5.4IDEA导入既有Maven项目
2.6Maven项目视图
3.Maven进阶
3.1pom.xml文件
3.2坐标
3.2.1坐标的概念
3.2.2坐标的意义
3.2.3坐标的含义
3.2.4自己项目的坐标
3.2.5第三方项目坐标
3.3依赖
3.3.1依赖的意义
3.3.2依赖的使用
3.3.3第三方依赖的查找方法
3.4依赖范围
3.5依赖传递和可选依赖
3.5.1依赖传递
3.5.2依赖范围对传递依赖的影响
3.5.3依赖阻断
3.5.4可选依赖
3.6仓库
3.6.1仓库的概念
3.6.2本地仓库
3.6.3中央仓库
3.6.4依赖搜索顺序
3.7生命周期
3.7.1生命周期的概念
3.7.2完整生命周期
3.8Maven的插件
3.9Maven继承和聚合
3.9.1继承的意义
3.9.2可继承的POM元素
3.9.3IDEA实现Maven的继承
3.9.4继承的依赖管理
3.9.5聚合管理
3.9.6properties属性的使用
4.maven私服架构
4.1maven私服介绍
4.1.1私服介绍
4.1.2Nexus介绍
4.2maven私服实战
4.2.1nexus安装
4.2.2nexus仓库类型
4.2.3将项目发布到私服
4.2.4从私服下载jar包
4.2.5第三方jar包发布到私服 1.Maven的概念
1.1什么是Maven
翻译为“专家”“内行”Maven是跨平台的项目管理工具。主要服务于基于Java平台的项目构建依赖管理和项目信息管理。什么是理想的项目构建 高度自动化跨平台可重用的组件标准化的流程 什么是依赖为什么要进行依赖管理 自动下载统一依赖管理A1.0 依托于 B 2.0 依托于 C3.0
有哪些项目信息 项目名称描述等开发人员信息开发者信息等
1.2什么是依赖管理
对第三方依赖包的管理可以连接互联网下载项目所需第三方jar包。
对自己开发的模块的管理可以像引用第三方依赖包一样引用自己项目的依赖包。 1.3什么是项目构建 项目构建是一个从编写源代码到编译、测试、运行、打包、部署的过程。 传统项目和maven项目构建的两种方式 传统项目 打开Idea编写源代码和配置文件对源代码进行编译可以使用Junit进行单元测试把项目打成war包部署到Tomcat服务器中运行。 maven项目 maven将项目构建过程进行标准化每个阶段都可以使用一个命令来完成。 清理 -- 编译 -- 测试 -- 报告 -- 打包 -- 部署 好处 可以通过命令完成项目构建。测试使用mvn tomcat:run的命令来发布运行项目 maven对每个构建阶段进行规范有利于大型团队协作开发。 1.4Maven的应用场景 maven的应用场景开发人员只要按着maven标准的目录结构进行开发即可然后提交代码。在测试服务器上拉取Java源码然后可以使用maven的自动化项目构建完成项目的清理、编译、测试、打包和安装部署等。 1.5为什么使用Maven
IDEEclipseIDEA 手工操作较多编译、测试、部署等工作都是独立的很难一步完成每个人的IDE配置都不同很容易就出错出现本地代码换个地方编译 Ant 没有一个约定的目录结构必须明确让ant做什么什么时候做然后编译打包没有生命周期必须定义目标及其实现的任务序列没有集成依赖管理 Maven 拥有约定知道你的代码在哪里放到哪里去拥有一个生命周期例如执行 mvn install 就可以自动执行编译测试打包等构建过程只需要定义一个pom.xml,然后把源码放到默认的目录Maven帮你处理其他事情拥有依赖管理仓库管理
1.6Maven模型 2.初识Maven
2.1Maven安装
2.1.1安装准备
安装jdk1.8或以上版本 略 下载Maven 地址Download Apache Maven – Maven下载地址Index of /dist/maven/maven-3/3.6.0/binaries版本Maven3.6 安装Maven 解压到相应目录即可(无中文路径) 2.1.2Maven安装目录分析 bin含有mvn运行的脚本 boot含有plexus-classworlds类加载器框架 conf含有settings.xml配置文件 lib含有Maven运行时所需要的java类库 LICENSE.txt, NOTICE.txt, README.txt针对Maven版本第三方软件等简要介绍 2.1.3Maven的环境变量 设置MAVEN_HOME环境变量 升级时只需要下载最新版本解压缩重新设置MAVEN_HOME环境变量即可 设置MAVEN_OPTS环境变量 -Xms128m -Xmx512m 配置用户范围的settings.xml %MAVEN_HOME%/conf/settings.xml 全局的 ~/.m2/settings.xml 单个用户的
设置MAVEN_HOME环境变量,把maven的解压后的路径添加为变量值 设置Path环境变量,把 %MAVEN_HOME%\bin 添加到Path的变量值末尾,与前面的内容用 ; 隔开,如图: 配置MAVEN_OPTS运行环境变量大小解决大型项目内存溢出的问题
找到命令改参数治标不治本
-Xms128m -Xmx512m 验证配置是否完成 2.2Maven的第一个项目
2.2.1按照约定创建Maven项目目录 src/main/java —— 存放项目的.java文件 src/main/resources —— 存放项目资源文件如spring, mybatis配置文件 src/test/java —— 存放所有测试.java文件如JUnit测试类 src/test/resources —— 测试资源文件 target —— 项目输出位置 pom.xml 2.2.2在项目Hello根目录建立pom.xml
project xmlnshttp://maven.apache.org/POM/4.0.0 xmlns:xsihttp://www.w3.org/2001/XMLSchema-instance xsi:schemaLocationhttp://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsdmodelVersion4.0.0/modelVersiongroupIdcn.tx.maven/groupIdartifactIdHello/artifactIdversion0.0.1-SNAPSHOT/versionnameHello/namedependenciesdependencygroupIdjunit/groupIdartifactIdjunit/artifactIdversion4.9/versionscopetest/scope/dependency /dependencies
/project
2.2.3创建Hello.java文件 在src/main/java/cn/tx/maven目录下新建文件Hello.java
package cn.tx.maven;
public class Hello {public String sayHello(String name){return Hello name!;}
}
2.2.4创建HelloTest.java文件 在/src/test/java/cn/tx/maven目录下新建测试文件HelloTest.java
package cn.tx.maven;
import org.junit.Test;
import static junit.framework.Assert.*;
public class HelloTest {Testpublic void testHello(){Hello hello new Hello();String results hello.sayHello(maven);assertEquals(Hello maven!,results); }
}
2.2.5进行maven的项目操作
打开cmd命令行进入Hello项目根目录执行 mvn compile命令查看根目录变化cmd 中继续录入mvn clean命令然后再次查看根目录变化cmd 中录入 mvn clean compile命令, 查看根目录变化cmd 中录入 mvn clean test命令查看根目录变化cmd 中录入 mvn clean package命令,查看根目录变化cmd 中录入 mvn clean install 查看仓库会把项目安装到仓库里
2.3Maven的第二个项目
2.3.1按照约定创建Maven项目目录 HelloFriend --src -----main ----------java ----------resources -----test ---------java ---------resources --pom.xml 2.3.2在项目HelloFriend根目录建立pom.xml 在项目HelloFriend根目录建立pom.xml
project xmlnshttp://maven.apache.org/POM/4.0.0 xmlns:xsihttp://www.w3.org/2001/XMLSchema-instance xsi:schemaLocationhttp://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsdmodelVersion4.0.0/modelVersiongroupIdcn.tx.maven/groupIdartifactIdHelloFriend/artifactIdversion0.0.1-SNAPSHOT/versionnameHelloFriend/namedependenciesdependencygroupIdjunit/groupIdartifactIdjunit/artifactIdversion4.9/versionscopetest/scope/dependency dependencygroupIdcn.tx.maven/groupIdartifactIdHello/artifactIdversion0.0.1-SNAPSHOT/versionscopecompile/scope/dependency /dependencies
/project
2.3.3创建HelloFriend.java文件 在src/main/java/cn/tx/maven目录下新建文件HelloFriend.java
package cn.tx.maven;import cn.tx.maven.Hello;public class HelloFriend {public String sayHelloToFriend(String name){Hello hello new Hello();String str hello.sayHello(name) I am this.getMyName();System.out.println(str);return str;}public String getMyName(){return John;}}
2.3.4创建HelloFriendTest.java文件 在/src/test/java/cn/tx/maven目录下新建测试文件HelloFriendTest.java
package cn.tx.maven;import static junit.framework.Assert.assertEquals;import org.junit.Test;import cn.tx.maven.Hello;public class HelloFriendTest {Testpublic void tesHelloFriend(){HelloFriend helloFriend new HelloFriend();String results helloFriend.sayHelloToFriend(zhangsan);assertEquals(Hello zhangsan! I am John,results); }
}
2.3.5测试打包HelloFriend项目 在HelloFriend目录下执行命令mvn package 系统报错提示:Could not find artifact cn.tx.maven:Hello:jar:0.0.1-SNAPSHOT,表示无法找到HelloFriend所依赖的Hello 0.0.1-SNAPSHOT.jar 故此我们需要重新构建第一个项目Hello并安装到数据仓库在命令行Hello根目录下执行mvn clean install 对Hello项目进行清理并安装后,对HelloFriend项目再次进行打包 可以看到本次打包成功,说明HelloFriend项目已经可以加载Hello项目所打包的jar包
2.4Maven仓库配置
2.4.1Maven仓库概念
何为Maven仓库 用来统一存储所有Maven共享构建的位置就是仓库 Maven仓库布局 根据Maven坐标定义每个构建在仓库中唯一存储路径groupId/artifactId/version/artifactId-version.packaging 仓库的分类 本地仓库 ~/.m2/repository/ 可修改每个用户只有一个本地仓库 远程仓库 中央仓库Maven默认的远程仓库http://repo1.maven.org/maven2私服是一种特殊的远程仓库它是架设在局域网内的仓库
2.4.2Maven本地仓库配置
1.全局本地仓库(所有操作系统用户均影响)
%MAVEN_HOME%\conf\settings.xml文件,修改该文件会影响所有使用该Maven的用户的本地仓库,例如: 2.用户本地仓库(仅影响使用该配置文件的用户或程序) 该文件可以在任意目录,例如: 3.修改配置文件设置Maven本地仓库(以全局设置为例)
编辑D:\TOOLS\maven\apache-maven-3.5.4\conf\settings.xml文件
找到如下位置: 修改为: 保存退出即可
以上配置表示所有使用该Maven的程序或用户,如未单独配置,则默认加载以上目录的本地库文件;
Ps:课程提供本地库文件为shoprapository.zip,如果遇到打包不成功,jar包无法下载等情况,优先进行本地库配置,避免因网络导致的maven依赖包问题. 2.5IDEA整合Maven项目
2.5.1IDEA的Maven全局配置 启动IDEA后找到Settings 以上设置完成表示在本idea上,所有项目如未对Maven的配置进行单独配置,则默认均使用该Maven版本和本地库设置;
2.5.2IDEA创建Maven的Java项目 至此Maven的Java项目创建完成 测试Maven的jar包引入 以上,在IDEA上使用Maven进行Java项目的创建及测试已完成!
2.5.3IDEA创建Maven的Java web项目 配置完毕后会进行web项目的初始化,初始化过程取决于本地库是否已生成及网络情况,推荐使用课程提供的Maven本地库
如果创建项目速度非常慢,并且在Generating project in Batch mode卡住,则进行全局设置如下:
-DarchetypeCataloglocal 以上web项目则创建成功,接下来需要进行一些配置来确定web项目可以正常运行 添加war包的方法: 配置web服务器 添加本地tomcat配置 测试项目运行 至此,在IDEA上使用Maven配置的Java web工程已经完成配置
2.5.4IDEA导入既有Maven项目 以导入刚才的Maven项目的例子做示范: 导入引入依赖Hello项目的HelloFriend项目,可以看到Hello项目已经被打成jar包引用到HelloFriend的Maven依赖中 2.6Maven项目视图 Maven项目视图主要用于查看该maven项目的各项属性,同时也可以进行一些常见的maven的操作,比如打包,清理,测试等等; 3.Maven进阶
3.1pom.xml文件 就像 Make 的 MakeFile、Ant 的 build.xml 一样Maven 项目的核心是 pom.xml。POM( Project Object Model项目对象模型 ) 定义了项目的基本信息用于描述项目如何构建声明项目依赖等等。Gredele
3.2坐标
3.2.1坐标的概念 在 Maven 中坐标是构件的唯一标识Maven 坐标的元素包括 groupId、artifactId、version、packaging、classifier。上述5个元素中groupId、artifactId、version 是必须定义的packaging 是可选的 ( 默认为 jar )。
3.2.2坐标的意义
Maven世界拥有大量构建我们需要找一个用来唯一标识一个构建的统一规范拥有了统一规范就可以把查找工作交给机器
3.2.3坐标的含义
groupId组织标识一般为公司网址的反写项目名artifactId项目名称一般为项目名-模块名
version版本号 形式为0.0.1-SNAPSHOT
第一个 0 表示大版本号第二个 0 表示分支版本号第三个 0 表示小版本号SNAPSHOT -- 快照版本ALPHA -- 内侧版本BETA -- 公测版本RELEASE -- 稳定版本GA -- 正式发布
packaging打包的方式如pom, jar, maven-plugin, ejb, war, ...clissifier用来帮助定义构件输出的一些附属构件。
3.2.4自己项目的坐标 3.2.5第三方项目坐标 3.3依赖
3.3.1依赖的意义 当编写Java代码时我们总是需要一些库例如做单元测试我们需要JUnit库。对于更大的项目我们可能需要创建自己的库并在不同的部分使用它的项目。不同的项目需要不同版本的库。 保持项目最新的库JAR文件的正确版本不是一个容易的任务。 每个外部JAR可能还依赖于其他外部JAR文件等。以递归方式下载所有这些外部依赖JAR文件并确保下载正确的版本是一项巨大的任务。 当项目越来越大我们将需要越来越多的外部依赖。 Maven将下载它们并将它们放在您的本地Maven存储库中。 我们可以在POM文件中的dependencies元素内指定依赖关系。
3.3.2依赖的使用 例如我们的项目需要进行单元测试,则需要使用到junit-4.9.jar包,使用maven引用该依赖的方式如下: 属性说明:
三维坐标:引用依赖包的三维坐标,用来定位该依赖包;scope: 控制该依赖包在什么情况下会被加到 classpath 中;
3.3.3第三方依赖的查找方法 我们在不确定所需引用的第三方依赖包的坐标时,通过maven的中央仓库进行查找,网址: https://mvnrepository.com/; 以mybatis举例: 3.4依赖范围
Maven项目在开发工程中有三套classpath
主代码main下面的都是主代码在编译的时候的依赖测试代码test下是测试代码编译的时候的依赖运行时main代码在运行的时候对包的依赖
依赖范围的使用,通过在引用第三方依赖时的scope/scope标签进行设置,例如: 共 6 种 scope包括compile、provided、runtime、test、system、import。例如上图的junit,只在测试中使用,则选择test即可,默认为compile
Compile编译依赖范围。默认使用此依赖范围其下的maven依赖对于编译测试运行classpath都有效。Test测试依赖范围。只对测试classpath有效编译主代码或运行项目时无法使用此依赖。典型例子如junit。Provided已提供依赖范围。其对于编译与测试classpath有效运行时无效。如在web开发时只有在编译和测试时才用到servlet-api将其设置为此范围在运行时servlet-api由web容器提供无须依赖。并且在打war包时此范围的依赖不会打在WEB-INF/lib下。Runtime运行时依赖范围。与provided相对运行时classpath有效。典型例子如jdbc编写是接口规范运行是提供具体实现类需要jar包。 3.5依赖传递和可选依赖
3.5.1依赖传递
应用场景:
第一直接依赖: HelloFriend项目依赖Hello项目
第二直接依赖: MakeFriend项目依赖HelloFriend项目 3.5.2依赖范围对传递依赖的影响 传递依赖是会受到依赖范围的影响的,具体来看结果如下: 3.5.3依赖阻断 我们使用 例如我们在HelloFriend项目里面的Hello依赖处添加该配置 则makeFriend项目里面就不会再引入Hello的依赖
3.5.4可选依赖 如果我们需要在依赖中明确的排除掉某一依赖,则可以使用exclusion属性,排除掉引用的依赖,如图: 3.6仓库
3.6.1仓库的概念
在 Maven 的术语中仓库是一个位置place。
Maven 仓库是项目中依赖的第三方库这个库所在的位置叫做仓库。
在 Maven 中任何一个依赖、插件或者项目构建的输出都可以称之为构件。
Maven 仓库能帮助我们管理构件主要是JAR它就是放置所有JAR文件WARZIPPOM等等的地方。
仓库的类型有:
本地local中央central远程remote
3.6.2本地仓库 Maven 的本地仓库在安装 Maven 后并不会创建它是在第一次执行 maven 命令的时候才被创建。 运行 Maven 的时候Maven 所需要的任何构件都是直接从本地仓库获取的。如果本地仓库没有它会首先尝试从远程仓库下载构件至本地仓库然后再使用本地仓库的构件。 默认情况下不管Linux还是 Windows每个用户在自己的用户目录下都有一个路径名为 .m2/respository/ 的仓库目录 Maven 本地仓库默认被创建在 %USER_HOME% 目录下。要修改默认位置在 %Maven_HOME%\conf 目录中的 Maven 的 settings.xml 文件中定义另一个路径。 3.6.3中央仓库 Maven 中央仓库是由 Maven 社区提供的仓库其中包含了大量常用的库。 中央仓库包含了绝大多数流行的开源Java构件以及源码、作者信息、SCM、信息、许可证信息等。一般来说简单的Java项目依赖的构件都可以在这里下载到。 中央仓库的关键概念 这个仓库由 Maven 社区管理。 不需要配置。 需要通过网络才能访问。
3.6.4依赖搜索顺序 3.7生命周期
3.7.1生命周期的概念 Maven的生命周期是对所有的构建过程进行抽象和统一。Maven的生命周期是抽象的这意味着生命周期本身不做任何实际的工作生命周期只是定义了一系列的阶段并确定这些阶段的执行顺序。而在执行这些阶段时实际的工作还是由插件来完成的。这种思想与设计模式中的模板方法非常相似。
Maven有三套相互独立的生命周期:
Clean clean生命周期的目的是清理项目 Default default生命周期的目的是构建项目 site site生命周期的目的是建立项目站点。
3.7.2完整生命周期 生命周期 clean default site 阶段(phase)执行顺序由上至下 pre-clean validate pre-site clean initialize site post-clean generate-sources post-site process-sources site-deploy generate-resources process-resources compile process-classes generate-test-sources process-test-sources generate-test-resources process-test-resources test-compile process-test-classes test prepare-package package pre-integration-test integration-test post-integration-test verify install deploy 用户在mvn命令后可以指定三个生命周期中的任何阶段则Maven会按以下逻辑执行首先会得到该阶段所属生命周期从该生命周期中的第一个阶段开始按顺序执行直至该阶段本身。例如执行mvn clean命令会依次执行clean生命周期中的pre-clean阶段及clean阶段。mvn命令后可以指定多个阶段Maven会按照输入的顺序依次执行每次执行都会按照之前描述的逻辑执行。 之前提到实际的工作还是由插件来完成的这意味着插件需要和阶段绑定起来。Maven已经事先将很多核心插件绑定到对应的阶段这样用户几乎不用配置就有构建Maven项目。Maven的内置绑定如下 生命周期 阶段(phase) 插件目标 clean clean maven-clean-plugin:clean default process-resources maven-resources-plugin:resources compile maven-compiler-plugin:compile generate-test-resources maven-resources-plugin:testResouces test-compile maven-compiler-plugin:testCompile test maven-surefire-plugin:test package 打包类型是jar时maven-jar-plugin:jar 打包类型是war时maven-war-plugin:war install maven-install-plugin:install deploy maven-deploy-plugin:deploy site site maven-site-plugin:site site-deploy maven-site-plugin:deploy
3.8Maven的插件
3.9Maven继承和聚合
3.9.1继承的意义 继承就是避免重复maven的继承也是这样它还有一个好处就是让项目更加安全。比如我们在项目开发的过程中可能多个模块独立开发但是多个模块可能依赖相同的公共模块比如说每个模块都需要javaseo-utils在编译的时候maven-compiler-plugin插件也要被引入maven仓库地址以及发布目录都是相同的配置。我们可以使用Maven的继承功能把公共的配置信息写到父模块中子模块只要继承了该父模块也会继承父模块的配置信息。
3.9.2可继承的POM元素
groupId 项目组 ID 项目坐标的核心元素
version 项目版本项目坐标的核心元素
description 项目的描述信息
organization 项目的组织信息
inceptionYear 项目的创始年份
url 项目的 url 地址
develoers 项目的开发者信息
contributors 项目的贡献者信息
distributionManagerment 项目的部署信息
issueManagement 缺陷跟踪系统信息
ciManagement 项目的持续继承信息
scm 项目的版本控制信息
mailingListserv 项目的邮件列表信息
properties 自定义的 Maven 属性
dependencies 项目的依赖配置
dependencyManagement 醒目的依赖管理配置
repositories 项目的仓库配置
build 包括项目的源码目录配置、输出目录配置、插件配置、插件管理配置等
reporting 包括项目的报告输出目录配置、报告插件配置等。
3.9.3IDEA实现Maven的继承 创建父类项目 创建子类项目core 以同样的方式创建manage和portal项目: 至此,一个由parent统一管理core,manage和portal的mavan项目就创建好了; 观察父子项目的pom文件配置 3.9.4继承的依赖管理 父类直接引用依赖,如果在父类的dependencies内直接引用依赖,则子类都会继承该依赖,以mybatis为例: 父类通过dependencyManagement管理依赖,子类不会默认继承该依赖,但是当子类使用该依赖时无需考虑版本信息,直接继承父类dependencyManagement中设置的版本号(Version),以log4j为例: 3.9.5聚合管理 我们在平时的开发中项目往往会被划分为好几个模块比如common公共模块、system系统模块、log日志模块、reports统计模块、monitor监控模块等等。这时我们肯定会出现这么一个需要我们需要一次构件多个模块而不用每个模块都去mvn; 以上面得父子项目为例,当我们对parent进行mvn install时,会对core,manage和portal项目均进行install操作: 3.9.6properties属性的使用 通过 properties元素用户可以定义一个或多个 maven 属性然后在 maven 的其他地方使用 ${属性名称} 的方式引用该属性这种做法的意义在于消除重复和统一管理。比如需要在多个地方重复声明同样的 SpringFramework 版本现在只需要在一个地方声明就可以。 4.maven私服架构
4.1maven私服介绍
4.1.1私服介绍 正式开发不同的项目组开发不同的工程。maven-dao 工程开发完毕发布到私服maven-service 从私服下载 dao。 公司在自己的局域网内搭建自己的远程仓库服务器称为私服 私服服务器即是公司内部的 maven 远程仓库 每个员工的电脑上安装 maven 软件并且连接私服服务器员工将自己开发的项目打成 jar 并发布到私服服务器其它项目组从私服服务器下载所依赖的构件jar。 私服还充当一个代理服务器当私服上没有 jar 包会从互联网中央仓库自动下载。 4.1.2Nexus介绍 Nexus 是 Maven 仓库管理器 通过 nexus 可以搭建 maven 仓库同时 nexus 还提供强大的仓库管理功能构件搜索功能等。
4.2maven私服实战
4.2.1nexus安装
1.解压资料中的nexus-2.12.0-01-bundle.zip文件存放到一个不含中文的目录下。 查看conf文件下的nexus.properties配置文件可以修改对应的配置 2.nexus的安装命令使用管理员运行cmd命令窗口切换目录nexus\nexus-2.12.0-01\bin目录下执行nexus.bat install进行安装。执行nexus.bat start 启动服务 执行nexus.bat stop停止服务。
3.nexus的卸载命令使用管理员运行cmd命令窗口切换目录nexus\nexus-2.12.0-01\bin目录下执行nexus.bat uninstall进行卸载
4.访问图形化界面打开浏览器输入http://localhost:端口号/nexus访问
5.点击log in进行登录。用户名admin 密码admin123
4.2.2nexus仓库类型 nexus提供了不同的仓库类型 1.hosted宿主仓库 部署自己的 jar 到这个类型的仓库包括 releases 和 snapshot 两部分 Releases 公司内部发布版本仓库、 Snapshots 公司内部测试版本仓库 2.proxy代理仓库 用于代理远程的公共仓库如 maven 中央仓库用户连接私服私服自动去中央仓库下载 jar 包或者插件。 3.group仓库组用来合并多个 hosted/proxy 仓库通常我们配置自己的 maven 连接仓库组。Group仓库组也是可以自己进行定制的。 4.virtual(虚拟)兼容 Maven1 版本的 jar 或者插件
4.2.3将项目发布到私服 需要在客户端即部署要部署的工程电脑上配置 maven 环境并修改 settings.xml 文件 配置连接私服的用户和密码 。 此用户名和密码用于私服校验因为私服需要知道上传的账号和密码是否和私服中的账号和密码一致。 在servers节点下进行配置
!-- 定义稳定版本的id名称用户名密码 --
serveridreleases/idusernameadmin/usernamepasswordadmin123/password
/server
!-- 定义开发版本的id名称用户名密码 --
serveridsnapshots/idusernameadmin/usernamepasswordadmin123/password
/server 配置项目 pom.xml配置私服仓库的地址本公司的自己的 jar 包会上传到私服的宿主仓库根据工程的版本号决定上传到哪个宿主仓库如果版本为 release 则上传到私服的 release 仓库如果版本为snapshot 则上传到私服的 snapshot 仓库。
distributionManagementrepositoryidreleases/idurlhttp://localhost:8079/nexus/content/repositories/releases//url/repositorysnapshotRepositoryidsnapshots/idurlhttp://localhost:8079/nexus/content/repositories/snapshots//url/snapshotRepository
/distributionManagement 注意这里的 id 标签的值要和 settings.xml配置文件中的id值保持一致。 在该工程中执行deploy命令发布项目到私服上。 查看私服结果 可以发布RELEASES稳定版本的jar包到私服。 查看私服结果 4.2.4从私服下载jar包 在settings.xml配置文件配置私服的镜像文件
mirror!-- id名称 --idnexusmaven/id!-- 表示拦截所有的请求都重定向到私服从私服下载jar包私服没有再去中央仓库下载 --mirrorOf*/mirrorOf namenexus maven/name!-- 私服的组地址 --urlhttp://localhost:8079/nexus/content/groups/public//url
/mirror 进行测试 先把自己的某个项目发布到私服中然后删除掉本地仓库中的jar包再使用其他项目去依赖该jar包查看是否从私服中下载。 在其他项目中引入该坐标依赖。
!--依赖demo1这个项目--
dependenciesdependencygroupIdcn.tx.maven/groupIdartifactIdtxmaven_demo10413/artifactIdversion1.0-RELEASES/version/dependency
/dependencies 还有一种方式可以配置仓库的方式可以修改自己项目的pom配置文件添加仓库的配置。
repositoriesrepositoryidnexus/idnamenexusmaven/nameurlhttp://localhost:8079/nexus/content/groups/public//urlreleasesenabledtrue/enabled/releasessnapshotsenabledtrue/enabled/snapshots/repository
/repositories
pluginRepositoriespluginRepositoryidpublic/idurlhttp://localhost:8079/nexus/content/groups/public//urlnamepluginRepositories/name/pluginRepository
/pluginRepositories 上面的方式不是特别的理想需要在每一个项目的pom文件中都添加相同的配置比比较麻烦。可以在settings.xml配置文件中添加配置完成统一的设置。
!-- 下载jar包配置 --profile !--profile的id --iddev/idrepositoriesrepository !--仓库idrepositories可以配置多个仓库保证id不重复 --idnexus/id !--仓库地址即nexus仓库组的地址 --urlhttp://localhost:8079/nexus/content/groups/public//url !--是否下载releases构件 --releasesenabledtrue/enabled/releases !--是否下载snapshots构件 --snapshotsenabledtrue/enabled/snapshots/repository/repositoriespluginRepositories !-- 插件仓库maven的运行依赖插件也需要从私服下载插件 --pluginRepository !-- 插件仓库的id不允许重复如果重复后边配置会覆盖前边 --idpublic/idnamePublic Repositories/nameurlhttp://localhost:8079/nexus/content/groups/public//url/pluginRepository/pluginRepositories/profile 激活配置
activeProfilesactiveProfiledev/activeProfile
/activeProfiles 进行测试
4.2.5第三方jar包发布到私服
把jar包安装到本地仓库
mvn install:install-file -DgroupIdcom.alibaba -DartifactIdfastjson -Dversion1.1.37 -Dfilefastjson-1.1.37.jar -Dpackagingjar
把jar包上传到私服
先在settings.xml配置文件中配置用户名密码
serveridthirdparty/idusernameadmin/usernamepasswordadmin123/password
/server 上传到私服
mvn deploy:deploy-file -DgroupIdcom.alibaba -DartifactIdfastjson -Dversion1.1.37 -Dpackagingjar -Dfilefastjson-1.1.37.jar -Durlhttp://localhost:8079/nexus/content/repositories/thirdparty/ -DrepositoryIdthirdparty
-DartifactIdfastjson 名称不与本地仓库一致
-Dfilefastjson-1.1.37.jar 用全路径