maven笔记整理

SVN(git):源代码的版本管理工具
Maven:模块化的项目管理工具

一、环境变量配置:

1) maven 下载:
2) maven 安装(必须安装jdk并配置环境变量):
2.1 解压下载的maven包
2.2 配置环境变量
  M2_HOME = maven的根目录
  PATH =%M2_HOME%\bin;

2.3 测试maven是否安装正确: 命令行 mvn -v

二、修改本地和远程仓库:

本地仓库:找到maven_home目录下的conf目录下的settings.xml 配置的路径 如:<localRepository>D:/dev/maven-localrepo/localrepo</localRepository>     //localrepo就是maven的本地仓文文件夹

 

 

用文本工具Editplus打开 修改本地仓库的配置路径 上图

中央仓库地址:https://repo.maven.apache.org/maven2
(如何找到中央仓库地址:找到maven_home\lib\maven-model-builder-3.3.9.jar打开再找到pom.xml文件, 这个pom文件是所有pom文件的父文件,这里的 https://repo.maven.apache.org/maven2 就是中央仓库地址)

镜像仓库: 中央仓库都是国外的, 镜像仓库是国内的更加稳定

修改中央仓库采用国内的镜像仓:(采用阿里云中央仓库)
修改maven根目录下的conf文件夹中的setting.xml文件,内容如下:
<mirrors>
<mirror>
<id>alimaven</id>
<name>aliyun maven</name>
<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
<mirrorOf>central</mirrorOf>
</mirror>
</mirrors>

同时在settings.xml中修改镜像仓库--因为国外仓库太远 阿里的近 考虑网络延迟 所以用国内的喽

三、在eclipse中使用maven:

1)下载最新的eclipse版本(neon版本 则默认已经安装好maven及各种其它web开发插件)

在eclipse中修改默认jre名称显示JavaSE-1.5的问题?
在maven的settings.xml中找到<profiles></profiles>加入以下代码, 然后点击项目maven update project就好了

<profile>
<id>jdk-1.8</id>
<activation>
<activeByDefault>true</activeByDefault>
<jdk>1.8</jdk>
</activation>
<properties>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
<maven.compiler.compilerVersion>1.8</maven.compiler.compilerVersion>
</properties>
</profile>

3) 需要在eclipse配置maven的路径
window-首选项-maven-User Settings-点第二个浏览找到你安装的maven路径下面的settings.xml文件-update settings-apply-ok

 

 

 

4) 右键maven项目-maven-再点update project/alt+f5 --参照前面图例

四、使用maven构建简单项目:

 

如果没配置maven工作空间 就马上配一个:

接下来继续:


maven项目的目录结构
项目名
---src
  ---main
---java
  ---test
---java
  ---pom.xml
pom.xml文件模板:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">//这里可以不管

在pom.xml文件中打开 可以找自己项目的三维坐标信息,别人要引用就可以直接copy过去用

 


<modelVersion>4.0.0</modelVersion>
<!--一般是域名倒置 包名-->
<groupId>helloword</groupId>//com.taobao
<!--一般用项目名-模块名-->
<artifactId>module1</artifactId> //描述性文字
<version>1.0</version>//版本号 可以默认
---------------------------------------分割线------------------------------------------------------
<!--配置项目依赖-->
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.10</version>
</dependency>
</dependencies>

</project>

maven 基本命令:
mvn compile: 编译(在src同目录生成target目录)
mvn test : 测试 形成测试报告
mvn package: 打包(默认打jar包,包名artifactId-version.jar)
mvn clean : 清空编译文件(删除target目录)
mvn install : 将jar安装到本地仓库(在其他项目中就可以通过dependency加坐标来引用该jar包)

通过maven archetype插件自动创建符合maven规范的项目骨架
mvn archetype:generate //回车开启交互式創建 第一次很慢需要去下載插件

五、maven依赖的范围:(控制依赖包在三种classpath(编译、测试、运行)中是否有效的)
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.10</version>
<scope>配置依赖范围</scope>
</dependency>
scope的值有: compile provided runtime test system import
compile: 默认范围 , 表示编译、测试、运行都有效
provided: 编译、测试有效 运行无效 比如servlet api 只需要在编译测试有效,因为在运行时web容器已经包含了servlet api
runtime: 运行期有效 比如驱动包
test: 在测试范围有效 比如junit
system : 与本地系统相关联,移植性差 比如本地JAVA_HOME得值
import: 参考文档


六、maven依赖的传递:(A依赖B B依赖C 那么A会自动依赖C )
测试:
分别新建a、b、c 3个项目
先install c项目到本地仓库
再在b项目的pom.xml 配置依赖c
再install b项目到本地仓库
再在a项目的pom.xml 配置依赖b

在a项目就会自然看到c 这就是依赖传递, 当然也可以让只依赖b而不传递依赖c, 需要在a的pom.xml配置b依赖的地方排除c依赖
<dependency>
<groupId>com.hwgk</groupId>
<artifactId>b</artifactId>
<version>0.0.1-SNAPSHOT</version>
<exclusions>
<exclusion>
<groupId>com.hwgk</groupId>
<artifactId>c</artifactId>
</exclusion>
</exclusions>
</dependency>


七、maven依赖冲突:a依赖了b, b依赖c,c依赖了junit3.8.1.jar 同时a依赖d d也依赖junit4.10.jar 那么就叫junit依赖产生冲突
依赖冲突的优先原则:
1)短路优先
a依赖了b, b依赖c,c依赖了junit3.8.1.jar 同时a依赖d d也依赖junit4.10.jar 那么就叫junit依赖产生冲突 按照短路优先原则,则a会依赖d中的依赖的junit.4.10.jar

2) 路径相同,先申明优先依赖
a依赖了b, b依赖了junit3.8.1.jar 同时a依赖d d也依赖junit4.10.jar 那么就叫junit依赖产生冲突 按照路径相同,先申明优先依赖原则,则a会根据b和d的位置关系选择依赖的junit版本

确认理解:是不是在pom.xml文件中dependency谁在前面就依赖谁?

八、maven的聚合:例如一个项目core分为a项目模块 b项目模块 c项目模块 d项目模块 则可以把a、b、c、d聚合在core中 一起编译测试运行等
在core项目中:pom.xml配置
<packaging>pom</packaging>

<modules>
<module>../a</module>//module--模块的意思
<module>../b</module>
<module>../c</module>
<module>../d</module>
</modules>

对该pom.xml执行的操作会对聚合的4个模块全部执行
补充:core项目是没有业务逻辑的项目所以在<packaging>pom</packaging>配置pom,另外还有 jar包-javase项目 war包-javaweb项目两种
将单元测试的系统生成的Test文件和pom.xml中junit依赖--聚合的模块不需要功能,都删掉 update更新

九、maven的继承:配置文件之间继承
父pom.xml 配置:
<packaging>pom</packaging>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<junit-version>4.11</junit-version>
</properties>

<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>${junit-version}</version>
<scope>test</scope>
</dependency>
</dependencies>
子pom.xml 配置:
<parent>
<groupId>com.hwgk</groupId>
<artifactId>parent</artifactId>
<version>0.0.1-SNAPSHOT</version>
</parent>
补充:新建一个父项目,无业务逻辑 删去junit 将需要的用依赖全部定义在父类中 子类依赖父类(填写父类的三维坐标)

十、maven构建javaweb项目:
解决新建web项目pom.xml报错com.thoughtworks.xstream.io.HierarchicalStreamDriver的问题:
1.删除本地仓库com.thoughtworks.xstream文件
2.在pom.xml文件添加依赖
<dependency>
<groupId>com.thoughtworks.xstream</groupId>
<artifactId>xstream</artifactId>
<version>1.4.3</version>
</dependency>
3.重新update一下项目即可

解决index.jsp文件首行报错的问题:没有servlet api的原因 添加依赖即可
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>2.5</version>
<scope>provided</scope>
</dependency>

发布javaweb项目:
1) 项目右键run on server
2) 利用插件发布到tomcat:(参考tomcat官网Maven Plugin配置)
<build>
<plugins>
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>2.2</version>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>run</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>

 注:W项目和Q项目个人感觉在形式上,W项目的Src中会有webapp 如图 Q项目则没有

 

posted @ 2018-01-02 21:50  一夜醉清风  阅读(219)  评论(0编辑  收藏  举报