Maven学习

Maven配置本地仓库和镜像仓库

  1. 配置本地仓库路径
    默认: ~/.m2/repository
    修改: install_home/conf/settings.xml
<settings ..>
	<localRepository></localRepository>
</settings>
  1. 通过maven创建项目
    mvn archetype:generate
    提示:
    groupId 如: com.corpname.project
    artifactId: moduleName
    版本/包名/确认 回车

  2. 配置镜像仓库// mirrorOf * 所有jar都从这里取

<mirror>  
    <id>nexus-aliyun</id>  
    <mirrorOf>*</mirrorOf>    
    <name>Nexus aliyun</name>  
    <url>http://maven.aliyun.com/nexus/content/groups/public</url>  
</mirror>
  1. 使用maven创建的项目默认使用JDK1.5,修改JDK
<profile>
	<id>jdk-1.8</id>
	<activation>
		<jdk>1.8</jdk>
		<activeByDefault>true</activeByDefault>
	</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>

Maven项目创建

1.2 常用操作
archetype 根据模板创建maven项目骨架
clean 清理(删除target目录)
--------------------------------------------------------------
compile 编译 (运行前先切换到项目目录)
package 打包(此命令包含了compile的动作)
install 安装(此命令包含了package的动作) 供本地仓库使用
deploy 发布 供中央仓库使用 需要仓库地址/账号/密码
site 生成关于项目介绍的网页

2.web项目创建 命令: mvn archetype:generate 10
2.1 目录结构

|-project
    |-src       					//程序代码
    	|-main					//主代码
    		|-java 		 		//源码根目录(需要自己创建)
    		|-resources 			//资源配置文件夹
    		|-webapp        			//相当于传统的WebRoot
    			|-WEB-INF
    				|-web.xml
    |-pom.xml			//maven核心配置文件

2.2 常用操作
同1.2
mvn tomcat:run #如果本地没有tomcat,可以使用命令下载插件来部署

  1. 生命周期
    build过程: 清理,编译,测试,打包,集成测试,部署
    三套生命周期: clean, default, site #互相独立没有以来,每个生命周期包含多个阶段
    default: compile->test->package #阶段之间有依赖

  2. IDE中使用Maven
    4.1 eclipse for JAVAEE 默认支持
    4.2 My Eclipse 默认支持
    ** 指定自己的maven安装目录,制定maven配置文件
    4.3 IDEA 默认支持
    设置:
    指定maven安装目录/配置文件路径/仓库路径
    plugins->buid tools->maven->import->import maven projects automatically

pom.xml详解

  1. 坐标解释
  <!--   坐标 定位唯一 
  	groupId: 域名组织反向
  	artifactId: 模块
  	version: 版本
  -->
  <groupId>com.test.shop</groupId>
  <artifactId>mall</artifactId>
  <version>1.0-SNAPSHOT</version>
  1. 如何查找坐标
    官方:search.maven.org
    第三方: mvnrepository.com
    阿里云:maven.aliyun.com/nexus
    Spring仓库: repo.spring.io

  2. 作用域
    compile 该依赖可以在整个项目中使用,参与打包,部署 。 默认值
    test 该依赖只能在测试代码中能使用,并且不参与打包,部署。 如: JUnit
    provided 该依赖编写源代码时需要,但不需要打包和部署,因为服务器上有。 如: tomcat里面就自带。
    runtime 该依赖编写时不需要,但是打包,部署时需要。 如: 数据库驱动, 反射机制动态加载。
    system 该依赖使用本地系统路径下的jar包,不是仓库中的jar。 如:oracle驱动,因为版权原因不能放到中央仓库。
    配置参考:

  <scope>system</scope>
  <systemPath>${basedir}/lib/xxxx.jar</systemPath>
  1. 全局属性
  <properties>
      <xxx.version>1.0.0</xxx.version>
  </properties>
  <dependency>
      <version>${xxx.version}</version>
  </dependency>
  1. 配置远程仓库: 有些最新的jar包或者私服上自己定义的jar在中央仓库中没有,则使用这样的方式
    依赖顺序: 本地仓库 -> pom.xml中配置的远程仓库 -> settings.xml中的远程仓库
  <repositories>
  	<repository>
  		<id>xxxx</id>
  		<url>http://xxxxxxxxx</url>
  	</repository>
  </repositories>
  1. 用来配置插件

  2. 超级pom.xml
    所有的pom.xml都隐式继承了一个超级pom.xml, 所以会默认支持一些插件。

  3. Maven中的关系
    8.1 继承
    一个maven项目可以继承自另一个maven项目,分别成为父项目,子项目。
    场景: 多个子项目中使用相同的依赖或插件, 以达到统一管理和一致性的目的。
    步骤:
    8.1.1 父项目配置

		<!--
	   		jar:默认打包成jar包
	   		war: web项目打包方式
	   		pom: 父项目的打包方式
		-->
		<packaging>pom</packaging>
   	    8.1.2 子项目中指定父项目的坐标
  		<parent>
  	        <groupId></groupId>
  	        <artifactId></artifactId>
  	        <version></version>
  	        <!-- 指定父项目pom.xml文件的相对物理路径 -->
  	        <relativePath>../parentPoject/pom.xml</relativePath>
  	    </parent>
   	    8.1.3 依赖管理
   	        父工程中配置:
   	        <!-- 只进行管理,不让子项目默认继承依赖。子项目中引用指定的依赖    -->
   	        <dependencyManagement>
   	        	<dependencies>
   	        		<dependency>
   	        			...
   	        		</dependency>
   	        		...
   	        	</dependencies>
   	        </dependencyManagement>
8.2 聚合(告诉父项目有哪些子项目)
	将多个子项目添加到一个父项目中,然后能通过父项目进行操作,从而实现对所有聚合的子项目进行操作。
    <!-- 指定被聚合的子项目的根目录 -->
    <modules>
    	<module>../child1</module>
    	<module>../child2</module>
    </modules>
8.3 依赖
    8.3.1 依赖具有传递性
        因为:项目A -> 项目B -> 项目C   所以: 项目A -> 项目C
    8.3.2 依赖传递的控制
     作用域: compile可以传递; test不可以
     不传递:A->B   B中配置为optional为true的不会被传递到A
     不接收:A->B   A中配置排除,表示不接收被传递的依赖:
     	<exclusions>
     		<exclusion>
     			<groupId></groupId>
     			<artifactId></artifactId>
     		</exclusion>
     	</exclusions>
  1. maven防止jar包冲突
    原则:
    就近原则 A->B->C B和C定义了两个冲突的jar, 但是A通过就近原则会使用B中定义的jar。
    优先定义原则 A->B->C 且 A->D B和D中定义了两个冲突的jar, 但是A通过优先定义(dependency顺序)原则使用jar。

  2. maven的web项目
    exploded 支持热部署,无需打包成war到tomcat.
    使用tomcat插件:
    10.1 search tomcat maven plugi
    10.2

			<plugin>
				<configuration>
					<path>/</path>
					<port>8888<port>
				</configuration>
			</plugin>
  1. 使用Nexus搭建Maven私服
    11.1 原因:
    1) 为了安全,公司不许访问外网,是能通过特定的电脑访问外网。
    2) 速度快,方便。
    3) 存放公司自己的库。
    11.2 Nexus工具
    搭建步骤:
    1) 解压缩并安装为系统服务 install-nexus.bat
    2) 访问 localhost:8081/nexus
    3) 仓库地址 http://localhost:8081/nexus/content/groups/public
    4) 私服上配置阿里云
    登入账号/密码:admin/admin123
    添加第三方仓库地址:Repositories -> Add -> Proxy Repository
    设置:remote storage location=http://maven.aliyun.com/nexus/content/groups/public
    添加到查找列表 Public Repositories -> Configuration 并调整仓库查找顺序
    5) 在Nexus上添加本地的jar包
    Repositories -> Artifact Upload

  2. 综合应用
    12.1 分析
    可以按业务分,按层次分,按业务和层次分

12.2 按层次分
	父工程: demo-parent
	dao:demo-dao
		映射文件存放的两种方式:
		1) 放置在resources目录。
		2) 和java代码放置在一起, maven默认指挥对java代码进行包, 如果需要对配置文件也进行打包, 则需要额外配置。 

			<build>
				<resources>
					<resource>
						<directory>src/main/java</directory>
						<includes>
							<include>**/*.xml</include>
							<include>**/*.properties</include>
						</includes>
						<filtering>false</filtering><!-- 是否存在排除过滤 -->
					</resource>
					<resource>
						<directory>src/main/resources</directory><!-- resources需要重新配置, 否则不会打包 -->
						<includes>
							<include>**/*.xml</include>
							<include>**/*.properties</include>
						</includes>
						<filtering>false</filtering>
					</resource>
				</resources>
			</build>
	service: demo-service
	action: demo-action
	步骤:
		1) 创建父子工程 使用继承和聚合
		2) 配置工程依赖
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值