maven
来源:互联网 发布:教务系统的数据库设计 编辑:程序博客网 时间:2024/06/05 17:53
使用maven解决以上两个缺点:
1 一步构建(一步就执行编辑,测试,打包,部署)
2 不需要下载任何jar包,只需要通过配置pom.xml和setting.xml就可以自动从互联网中下载
Maven:跨平台的项目管理工具
上课使用版本: apache-maven-3.0.5-bin.zip,前提需要安装JDK
bin:放了一些mvn的命令
boot:放了一些引导程序,类加载器
conf:配置文件
lib:maven本身运行所需的jar包
看安装好没有直接在cmd下输入mvn -v
提示没有JAVA_HOME
解决:配置JAVA_HOME(只需要配置到JDK后截止,不要配到bin)
然后继续输入mvn –v —弹出信息—成功
打开该路径:
C:\Users\Administrator\.m2
通过cmd – 输入 mvn回车后,在该路径下产生了一个本地仓库文件repository(当然也可以不使用该路径,自己去配路径,比如我新建了E:\mavenRepository,该文件夹当成Maven仓库)
我的maven安装在:E:\apache-maven-3.0.5\
配置仓库:
打开E:\apache-maven-3.0.5\conf\settings.xml
<localRepository>E:\mavenRepository</localRepository>
pom.xml和src同级
步骤:新建maven项目:
1 配置自己的maven版本
点 add 添加自己的maven版本 (配置到根目录即可)
2 指定用户的setting.xml
默认这样配也可以拷贝一份settings.xml到改路径和默认仓库并级
用MyEclipse创建Maven工程
仓库是用来放各种依赖的jar包:通过pom.xml来管理jar包
指针是从 仓管(repository开始 :分3层指定的 参考下面红色框框)
如
当写好pom.xml后一保存则maven自动通过你设定好的路径引用jar包
如果改成4.9的版本
------------------------
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.9</version>
</dependency>
</dependencies>
----------------
则我们的本地仓库没有,它会自动连接互联网从中央仓库下载:
Maven的生命周期:大致分为3个,而这个3个都是完全独立的,
而完成Maven生命周期的是E:\mavenRepository\org\apache\maven\plugins的插件
1 clean :清理(移除上一次构建的文件)
2 default: 每次执行其中某一个操作,Maven都会从编译开始执行到目标操作:如执行打包,则maven会执行编译-测试-打包
(1) 编译 :compile
(2) 测试 :test
(3) 打包 :package
(4) 安装(部署):install(安装在本地,让其他项目依赖)
deploy(安装在远程仓库,让其他开发区人员共享)
3 site:站点的生成(生成其他信息:如公司信息,研发人员表,贡献人员表,项目信息等等….)
操作:
在pom.xml中右键:Run As– Maven Build
运行后第一次要下载插件,需要等下,成功后在仓库多了以下jar包
而且在该项目的路径中的target文件夹也有打包好的该项目的jar包。
生成站点: 命令:site
通过该命令可以在target文件中多生成很多站点(网址),用于访问
打开index.html
依赖管理:
Hello1 maven项目中:
//然后 clean install
Hello2 maven项目中引用Hello1:
则Hello2中可以引用Hello1中的类
//然后 clean install
Hello3 maven项目中引用Hello2:
则Hello3中可以引用Hello1和Hello2中的类
依赖范围
如:
传递性依赖:特点
1 路径最近者优先(A依赖B,B依赖C ,则C优先依赖B)
2 pom.xml中最后配置优先
列是第一直接依赖,行是第二直接依赖
举例:hello3 中(第一直接依赖)
Hello2中:(第二直接依赖)
则 hello3失去hello1的类
如果想让hello1的传递纸杯hello2得到而不想让hello3得到
可以通过以下两种方法:
1 可选依赖:不被传递
例子:在hello2中:添加<optional>true</optional>
则表示hello1 在hello2 中能够传递,但不能继续往下传递了,因此hello3无法用到hello1的类
2 排除传递
例子:在hello3中添加
<exclusions>
<exclusion>
<groupId>com.demo1</groupId>
<artifactId>Hello1</artifactId>
</exclusion>
</exclusions>
关于packaging属性:
Jar包:纯java工程(默认)
Web包:web工程
Pom :当该maven工程当成父类
聚合和继承
步骤:
1创建Maven项目。但<packaging>的值必须是pom
当改成pom报错:
Description Resource Path Location Type
Project configuration is not up-to-date with pom.xml. Run project configuration updateHello line 1 Maven Configuration Problem
解决方案:项目右键-Maven4MyEclipse-Update Project…-默认勾选了该项目-ok
2 使用dependencyManagement表现管理依赖
<dependencyManagement>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.9</version>
</dependency>
……
</dependencies>
</dependencyManagement>
注意:子类的依赖父类一定有不然要报错
3在Hello1 中:第一句代码必须是继承
、4写相关需要的依赖(前提是父项目必须有)
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<!-- 子项目还是需要学前两个id,但不写版本了,版本由父项目统一管理-->
</dependency>
</dependencies>
所有的依赖都不要写版本了
父模块的依赖都用dependencyManagement 来管理,这样 子模块虽然继承了父模块,但实际上没引用到父模块的包,必须自己显示的写出dependency,但不需要写版本号,因为子模块显示的写出依赖后就自动引用了父模块的版本后,所以以后升级父模块的版本,子模块就跟着升级了 --
总结 dependencyManagement 用于统一管理版本
优点:使用继承的目的是为了让父项目统一管理jar包的版本,便于升级
缺点:Hello,Hello1,Hello2,Hello3每个项目都需要执行install,部署到本地,太麻烦
改进---聚合:只需要执行install父项目,所有子项目都自动instasll
步骤
1:在父项目的中添加:
<!-- 引入子项目的路径-->
<modules>
<module>../Hello1</module>
<module>../Hello2</module>
<module>../Hello3</module>
</modules>
2 :install父项目
补充:导入Maven项目:
Nexus 私服的安装 nexus-2.1.1-bundle.zip
1 配置环境变量D:\nexus-2.1.1-bundle\nexus-2.1.1\bin
2 cmd nexus 查看命令 然后 nexus install (安装到服务里去)
3 nexus start (但结果会失败 因为一般只支持linux需要我们修改配置)
失败的截图
4 找到D:\nexus-2.1.1-bundle\nexus-2.1.1\bin\jsw\conf的
5 找到jdk路径F:\Program Files\Java\jdk1.8.0_92\bin把它复制到上面java前
成功后截图
网址输入 http://localhost:8081/nexus/
点击左边的repositories出现如下界面
对应本地该路径下的文件
私服的jar包存在于:D:\nexus-2.1.1-bundle\sonatype-work\nexus\storage\central中
Central 代理apache的中央仓库,能够下载中央仓库提供的jar包
snapshots 部署测试版
release 部署正式版
3 rd party 第三方仓库,如果无法从中央仓库下载就用它
Public Repositories :公共仓库组(包含)
如何上传到私服:
1 在需要上传的maven项目中的pom.xml中的最后配置:
<!-- 依赖包发布到私服-->
<distributionManagement>
<!-- 上传到release仓库-->
<repository>
<id>releases</id>
<name>Release Repository</name>
<url>http://localhost:8081/nexus/content/repositories/releases</url>
</repository>
<!-- 上传到snapshot仓库-->
<snapshotRepository>
<id>snapshot</id>
<name>Snapshot Repository</name>
<url>http://localhost:8081/nexus/content/repositories/snapshots</url>
</snapshotRepository>
</distributionManagement>
2 在settings.xml的<servers>下配置权限(id和pom.xml的id一致,而且必须配置权限,不配置会出现401错误)
<!--权限控制-->
<server>
<id>releases</id>
<username>admin</username>
<password>admin123</password>
</server>
<server>
<id>snapshot</id>
<username>admin</username>
<password>admin123</password>
</server>
3 在pom.xml中:通过组合命令:clean install(第一次写) deploy
在public repositories和snapshots能够看到上传的包,但在releases却看不到的原因
因为我们新建的maven的版本是snapshots开发(测试)版本
如果把SNAPSHOT 改成 RELEASE 再次运行 clean deploy就能在releases看到上传的jar包
如何从私服下载:
1 找到E:\apache-maven-3.0.5\conf
在<mirrors>中配置:
<!--在maven中不配置mirror时使用的maven的中央库.配置镜像的目的是让程序员从私服中下载jar包,阻止程序员从中央仓库中下载-->
<mirror>
<!--id唯一性,但最好写central-->
<id>central</id>
<!--拦截所有仓库做镜像,在该xml中可以配置很多仓库repository-->
<mirrorOf>*</mirrorOf>
<!--镜像的url,从改地址(私服)下载jar包-->
<url>http://localhost:8081/nexus/content/groups/public</url>
</mirror>
注意:url就是Public Repositories :公共仓库组提供的地址
如何将自己的jar包上传到私服中的第三方仓库(一般用于无法从Maven中央仓库下载的jar包)
举例用MySQL驱动包
选择3 rd party,点选Artifact Upload
- Maven
- Maven
- Maven
- maven
- Maven
- Maven
- maven
- maven
- maven
- maven
- Maven
- maven .
- Maven
- maven
- maven
- maven
- MAVEN
- Maven
- <button>和<input type="button">的区别
- js重写Date日期对象的add方法
- 2017 Multi-University Training Contest
- AR博物馆、景区实景导览工具、AR校园方案-十二居
- 关于String str="abc"与String str= new String("abc")区别
- maven
- ES6正则表达式扩展
- django中传参数给模板
- java写的AES文件加解密模块
- 深入分析java线程池的实现原理
- WebDAV服务漏洞利用工具DAVTest
- 性能优化-OnTrimMemory
- 技巧:Vimdiff 使用
- PHP文件写入与读取