maven

来源:互联网 发布:教务系统的数据库设计 编辑:程序博客网 时间:2024/06/05 17:53

使用maven解决以上两个缺点:

1 一步构建(一步就执行编辑,测试,打包,部署)

2 不需要下载任何jar包,只需要通过配置pom.xmlsetting.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.xmlsrc同级

 

 

 

步骤:新建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中可以引用Hello1Hello2中的类

 

依赖范围


如:


传递性依赖:特点

1 路径最近者优先(A依赖BB依赖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>

注意:子类的依赖父类一定有不然要报错

 

3Hello1 中:第一句代码必须是继承


4写相关需要的依赖(前提是父项目必须有)

<dependencies>

<dependency>

<groupId>junit</groupId>

<artifactId>junit</artifactId>

<!-- 子项目还是需要学前两个id,但不写版本了,版本由父项目统一管理-->

</dependency>

</dependencies> 

所有的依赖都不要写版本了

父模块的依赖都用dependencyManagement 来管理,这样 子模块虽然继承了父模块,但实际上没引用到父模块的包,必须自己显示的写出dependency,但不需要写版本号,因为子模块显示的写出依赖后就自动引用了父模块的版本后,所以以后升级父模块的版本,子模块就跟着升级了 --

总结 dependencyManagement  用于统一管理版本

 

优点:使用继承的目的是为了让父项目统一管理jar包的版本,便于升级

缺点:HelloHello1Hello2Hello3每个项目都需要执行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>下配置权限(idpom.xmlid一致,而且必须配置权限,不配置会出现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 repositoriessnapshots能够看到上传的包,但在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




原创粉丝点击