Maven

1.Maven的入门

1.1Maven的介绍

Maven是一个项目管理工具和自动化构建工具,还可以管理Jar包的依赖
Maven的读音:麦文、妹文
项目管理工具:Ant—Maven—Gradle

1.2Maven的作用

作用一: 项目管理【Project Object Management】
作用二: 项目自动化构建,[一键完成 清理编译-测试-打包-部署]
作用三: Jar包依赖管理

1.3Maven的好处

好处一:maven支持多种平台,windows/linux/mac
好处二: maven便于项目团队开发,适合大中型项目
好处三:可以节省磁盘空间和简化jar包管理

1.4Maven的安装

第一步:解压到指定的目录
D:\devsoft\apache-maven-3.6.3
第二步:配置maven的环境变量

M2_HOME=D:\devsoft\apache-maven-3.6.3
Path=;%M2_HOME%\bin

第三步:测试是否成功:
cmd: mvn -version

1.5Maven项目目录结构

项目名
src

  • main----------------------业务逻辑代码和业务逻辑代码所需要的配置文件的

    • java----------------=–业务逻辑代码
    • resources--------------业务逻辑代码所需要的配置文件
  • test----------------------存放测试代码和测试代码所需要的配置文件的

    • java-------------------存放测试代码 resources--------------测试代码所需要的配置文件的
    • pom.xml:相当于动态web工程的web.xml,在pom文件配置项目的坐标和依赖信息

1.6Maven的常用命令

mvn clean: 清理当前项目下的target目录
mvn compile:将src/main/java目录里面的java代码编译
mvn test:执行src/test/java目录里面的测试代码的
mvn package:将当前项目打成对应的包【Jar包、War包、Pom包】
mvn install:将当前项目打成对应的包扔到本地仓库中。
mvn deploy:将本地仓库对应的包部署到私服上。
mvn site: 用来生成项目的站点信息,了解。

1.7Maven的第一个案例

Maven程序的目录结构:

  • src/main/java —— 存放项目的.java文件
  • src/main/resources —— 存放项目资源文件,如spring, hibernate配置文件
  • src/test/java —— 存放所有测试.java文件,如JUnit测试类
  • src/test/resources —— 测试资源文件
  • target —— 项目输出位置[编译后可以自动生成]
  • pom.xml相当于web.xml
1.7.1首先建立Hello项目同时建立Maven约定的目录结构

Hello
–src
-----main
---------java
---------resources
-----test
---------java
---------resources
–pom.xml

1.7.2在项目Hello根目录建立pom.xml
<?xml version="1.0" ?>
<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/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>

	<groupId>com.offcn.maven</groupId>
	<artifactId>Hello</artifactId>
	<version>0.0.1-SNAPSHOT</version>

	<name>Hello</name>
	  
	<dependencies>
		<dependency>
			<groupId>junit</groupId>
			<artifactId>junit</artifactId>
			<version>4.0</version>
			<scope>test</scope>
		</dependency>
	</dependencies>
</project>
1.7.3在src/main/java/com/offcn/maven目录下新建文件Hello.java
package com.offcn.maven;

public class Hello {

	public String sayHello(String name){

		return "Hello "+name+"!";

	}

}
1.7.4在/src/test/java/com/offcn/maven目录下新建测试文件HelloTest.java
package com.offcn.maven;
	
	import org.junit.Test;
	import static junit.framework.Assert.*;
	
	public class HelloTest {
	
		@Test
		public void testHello(){
			
			Hello hello = new Hello();
			String results = hello.sayHello("litingwei");
			assertEquals("Hello litingwei!",results);		
	
		}
		
	}
1.7.5测试

①打开cmd命令行,进入Hello项目根目录(pom.xml文件所在目录)执行 mvn compile命令,查看根目录变化
②cmd 中继续录入mvn clean命令,然后再次查看根目录变化
③cmd 中录入 mvn clean compile命令, 查看根目录变化
④cmd 中录入 mvn clean test命令,查看target目录变化
⑤cmd 中录入 mvn clean package命令,查看target目录变化

2.Maven的依赖

2.1Maven的仓库划分

Maven的仓库:说白了,就是存放Jar包的一个文件夹
Maven的仓库划分: 本地仓库、远程仓库【私服、镜像仓库、中央仓库】
在这里插入图片描述

2.2本地仓库

本地仓库:在当前计算机上的一个存放Jar包的文件夹【目录】
Maven本地仓库:
默认位置:参考maven安装目录/conf/settings.xml/ Default: ${user.home}/.m2/repository
修改本地仓库位置:
在这里插入图片描述

2.3Maven的镜像仓库

阿里云镜像
在maven安装目录/conf/settings.xml文件中找一个mirrors标签:

 <mirror>
   <id>alimaven</id>
   <mirrorOf>central</mirrorOf>
   <name>aliyun maven</name>
   <url>http://maven.aliyun.com/nexus/content/repositories/central/</url>
</mirror>

2.4Maven的坐标

平面坐标:(x,y):平面坐标就是确定平面上一个点的
几何坐标:(x,y,z)几何坐标是用来确定空间中一个点
Maven坐标:简称为GAV坐标,确定当前项目打成的Jar包在本地仓库的位置。

	<groupId>com.offcn.maven</groupId>
	<artifactId>Hello</artifactId>
	<version>0.0.1-SNAPSHOT</version>

写法:
groupId:公司域名反写.项目名
artifactId:项目名_模块名|模块名
version: 0.0.1-SNAPSHOT

2.4.1Maven坐标和依赖的区别

Maven坐标:用来确定当前项目打成的Jar包在本地仓库的位置的。一个项目只有一个坐标

	<groupId>com.offcn.maven</groupId>
	<artifactId>Hello</artifactId>
	<version>0.0.1-SNAPSHOT</version>

Maven的依赖:用来引入当前项目所需要的Jar包,一个项目可以引入多个依赖信息。

	<dependency>
		<groupId>junit</groupId>
		<artifactId>junit</artifactId>
		<version>4.0</version>
		<scope>test</scope>
	</dependency>
2.4.2Maven坐标找Jar包

确定Jar所在目录: groupId+ artifactId+ version
Com/offcn/maven/ Hello/0.0.1-SNAPSHOT/

确定Jar包名称:artifactId- version
Hello-0.0.1-SNAPSHOT.jar

2.4.3由Jar包写出Maven坐标

3.Maven的第二个项目

3.1新建第二个项目模块目录及约定的目录结构

HelloFriend
–src
-----main
---------java
---------resources
-----test
---------java
---------resources
–pom.xml

3.2在项目HelloFriend根目录建立pom.xml

<?xml version="1.0" ?>
<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/xsd/maven-4.0.0.xsd">
	  <modelVersion>4.0.0</modelVersion>
	  <groupId>com.offcn.maven</groupId>
	  <artifactId>HelloFriend</artifactId>
	  <version>0.0.1-SNAPSHOT</version>
	  <name>HelloFriend</name>
	  
		<dependencies>
			<dependency>
				<groupId>junit</groupId>
				<artifactId>junit</artifactId>
				<version>4.0</version>
				<scope>test</scope>
			</dependency>		
			
			<dependency>
				<groupId>com.offcn.maven</groupId>
				<artifactId>Hello</artifactId>
				<version>0.0.1-SNAPSHOT</version>
				<scope>compile</scope>
			</dependency>
			
		</dependencies>
	</project>

3.3在src/main/java/com/offcn/maven目录下新建文件HelloFriend.java

package com.offcn.maven;
	
import com.offcn.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";
	}

}

3.4在/src/test/java/com/offcn/maven目录下新建测试文件HelloFriendTest.javapackage com.offcn.maven;

package com.offcn.maven;
	
import org.junit.Test;

public class HelloFriendTest {

	@Test
	public void testHelloFriend(){
		
		HelloFriend helloFriend = new HelloFriend();
		String str = helloFriend.sayHelloToFriend("litingwei");
		System.out.println(str);	

	}
	
}

3.5在HelloFriend目录下执行命令mvn package

系统报错说没有找到依赖。所有依赖的JAR包都应该正确安装到当前的Maven仓库中才能够使用,换句话说,Maven项目都是到当前仓库中去寻找它所依赖的JAR包的。

3.6需要重新构建Hello第一个项目并安装到数据仓库,在命令行Hello根目录下执行mvn clean install

3.7重新在HelloFriend目录下执行命令mvn package

3.8执行其他常用命令:site

通过第二个Maven项目实现了项目之间的通信,当然这个通信是伪通信,和我们直接给动态web工程导入一个Jar包是类似的

注意点:引入本地仓库的hello.jar包

3.9去哪儿找常用的Jar包依赖

https://mvnrepository.com/【建议使用】
http://search.maven.org/

4.Maven和eclipse整合

4.1整合

第一步:在Eclipse中配置Maven
在这里插入图片描述在这里插入图片描述在这里插入图片描述
第二步:
在这里插入图片描述

4.2Maven项目类型

jar工程:当一个项目A需要被其它项目依赖的时候,项目A就打成Jar包,
pom工程: 当一个工程是父工程或者聚合工程,就打成pom包
war工程:当项目需要部署到tomcat服务器运行的时候,就打成war包

4.3在Eclipse中创建Maven项目

鼠标右键-new-maven project—
在这里插入图片描述在这里插入图片描述

4.4如何在eclipse中使用maven命令

4.5Maven中创建项目遇到问题

问题一:
web.xml is missing and is set to true
缺少web.xml文件
解决方案:右键项目—JavaEE tools-Generate Deployment Descriptor Stub

问题二:
The superclass “javax.servlet.http.HttpServlet” was not found on the Java Build Path

解决方案:在项目的pom.xml文件中加入如下依赖

    <!-- jsp-api -->
	<dependency>
	    <groupId>javax.servlet</groupId>
	    <artifactId>jsp-api</artifactId>
	    <version>2.0</version>
	    <scope>provided</scope>
	</dependency>
	<!-- servlet-api -->
	<dependency>
	    <groupId>javax.servlet</groupId>
	    <artifactId>javax.servlet-api</artifactId>
	    <version>3.1.0</version>
	    <scope>provided</scope>
	</dependency>

问题三:Jdk问题
第一种:

  <build>
     <plugins>
       <plugin>
			        <groupId>org.apache.maven.plugins</groupId>
			        <artifactId>maven-compiler-plugin</artifactId>
		        	<version>3.5.1</version>  
		        	<configuration>
				          <source>1.7</source>
				          <target>1.7</target>
		         		<encoding>UTF-8</encoding>
			       </configuration>
		     </plugin>
     </plugins>
  </build>

第二种方式:在maven安装目录的conf/settings.xml文件中配置:

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

重启eclipse,再次创建项目的时候,就好使用Jdk1.8.

问题四: JDK问题
错误:on a JRE rather than a JDK
Eclipse中的JDK配置有问题,配置成了JRE的目录,改成JDK目录就可以了。

问题五:
-Dmaven.multiModuleProjectDirectory system property is not set.
Check $M2_HOME environment variable and mvn script match.
Windows系统maven环境变量的键:M2_HOME就可以了

4.6补充一:tomcat插件配置

  <build>
     <plugins>
       <plugin>
			<groupId>org.apache.tomcat.maven</groupId>
			<artifactId>tomcat7-maven-plugin</artifactId>
			<version>2.2</version>
			<configuration>
				<path>/ssm</path>
				<port>8888</port>
			</configuration>
		</plugin>
     </plugins>
     
  </build>

项目右键-run asmaven build… ,输入: tomcat7:run

4.7Jar包的依赖

Jar包依赖具有传递性,Jar包依赖传递的特点:
相同Jar包,只是版本号不同,路径不同,以路径短着优先
相同Jar包,只是版本号不同,路径相同,以先声明者优先

Jar包冲突解决的三种方案:

  • 相同Jar包,只是版本号不同,路径相同,以先声明者优先
  • 相同Jar包,只是版本号不同,路径不同,以路径短着优先
  • 排除法:
 <dependency>
      <groupId>com.offcn.maven</groupId>
	     <artifactId>HelloFriend</artifactId>
	     <version>0.0.1-SNAPSHOT</version>
	  <exclusions>
	     <!-- 每个exclusion都对应一个要排除的Jar包 -->
	     <exclusion>
	       <groupId>log4j</groupId>
			<artifactId>log4j</artifactId>
	     </exclusion>
	  </exclusions>
</dependency>

4.8Maven生命周期[了解]

Clean生命周期: 完成项目清理工作
mvn pre-clean
mvn clean
mvn post-clean

default生命周期:完成项目的编译、测试、打包、部署操作
mvn compile
mvn test
mvn package
mvn install
mvn deploy
site生命周期: 完成项目的站点相关操作
mvn pre-site
mvn site
mvn post-site

注意:每个生命周期的命令在执行的时候,默认都会从当前生命周期的第一个命令开始执行。

4.9父工程

父工程:父工程打成pom包,父工程用来管理子工程的Jar包版本号信息,不做实际依赖。
是通过dependencyManagement标签dependencies标签—

父工程pom文件

  <properties>
     <log4j.version>4.0.0.RELEASE</log4j.version>
  </properties>
  
  <!-- 在父工程中,dependencyManagement标签做Jar包版本的管理,不做实际依赖。 -->
  <dependencyManagement>
    <dependencies>
       <!-- log4j -->
		<dependency>
		    <groupId>log4j</groupId>
		    <artifactId>log4j</artifactId>
		    <version>${log4j.version}</version>
		</dependency>
    </dependencies>
  </dependencyManagement>

子工程pom文件

  <artifactId>son1</artifactId>
  
  <parent>
      <groupId>com.offcn</groupId>
	  <artifactId>parent01</artifactId>
	  <version>0.0.1-SNAPSHOT</version>
	  <relativePath>../parent01/pom.xml</relativePath>
  </parent>
    <dependencies>
     <dependency>
        <groupId>log4j</groupId>
	    <artifactId>log4j</artifactId>
     </dependency>
  </dependencies>

注意:子工程知道自己的父工程是哪个,但是父工程不知道自己有哪些子工程。

4.10聚合工程

聚合工程:打成pom包,聚合工程是用来管理其它工程的。
聚合工程的pom文件

  <!-- modules标签里面可以有多个module标签,每个module标签代表聚合工程管理的一个工程 -->
  <modules>
     <module>../app01/pom.xml</module>
     <module>../app02/pom.xml</module>
     <module>../app04/pom.xml</module>
  </modules>

注意:在实际开发中,一个项目作为父工程使用的时候同时也会作为聚合工程使用!

4.11依赖的范围[了解]

scope:
compile:默认值,表示该jar包在编译期、测试期、运行期都有效
test: 表示该Jar包在测试期有效
provided: 表示该Jar包在编译期、测试期有效。

5.Maven整合SSM[重点]

将现有的SSM项目改成由Maven管理的SSM项目:
1.导入Jar包的依赖
2.将ssm项目中的代码拷贝到maven项目的src/main/java
3.将ssm项目中的配置文件拷贝到maven项目的src/main/resources
4.将页面和web.xml文件拷贝到maven项目的src/main/webapp目录下

6.使用Maven进行SSM的分层开发【难点】

Bean代码—ssm_bean
Dao层代码、mybatis配置文件、dao层jar包依赖—ssm_dao
Service代码、service配置文件、service层的jar包依赖—ssm_service

Controller代码、controller层配置文件、controller层的jar包依赖、页面、web.xml—>ssm_web

Ssm_parent: jar包版本依赖信息

7.私服

nexus.bat install
nexus.bat start

启动失败时修改:
bin/jsw/conf/wrapper.conf文件
将15行的wrapper.java.command=java修改为:wrapper.java.command=java.exe所在的位置

nexus默认是使用jetty服务器的,在conf/nexus.properties文件中我们就可以看到,
nexus启动后默认访问:http://localhost:8081/nexus

登录私服【nexus】:
用户:admin
密码:admin123

仓库的类型:
virtual:虚拟仓库,不起作用
proxy:代理仓库,两个
Hosted 宿主仓库, 本地仓库
Group : 就是自己不知道下载的jar包是snapshot还是release版本的时候使用!

将自己的项目发布到私服上,如何发布呢?
执行deploy命令,前提是在当前项目的pom.xml文件中配置了私服的地址:

添加到settings.xml中

<server>
  <id>releases</id>
  <username>admin</username>
  <password>admin123</password>
</server>
<server>
  <id>snapshots</id>
  <username>admin</username>
  <password>admin123</password>
</server>

添加到pom.xml中

 <distributionManagement>
  	<repository>
  		<id>releases</id>
	<url>http://localhost:8081/nexus/content/repositories/releases/</url>
  	</repository> 
  	<snapshotRepository>
  		<id>snapshots</id>
	<url>http://localhost:8081/nexus/content/repositories/snapshots/</url>
  	</snapshotRepository> 
  </distributionManagement>

--------下载--------
添加到settings.xml中

<profile>   
	<!--profile的id-->
    <id>dev</id>   
    <repositories>   
      <repository>  
		<!--仓库id,repositories可以配置多个仓库,保证id不重复-->
        <id>nexus</id>   
		<!--仓库地址,即nexus仓库组的地址-->
        <url>http://localhost:8081/nexus/content/groups/public/</url>   
		<!--是否下载releases构件-->
        <releases>   
          <enabled>true</enabled>   
        </releases>   
		<!--是否下载snapshots构件-->
        <snapshots>   
          <enabled>true</enabled>   
        </snapshots>   
      </repository>   
    </repositories>  
	 <pluginRepositories>  
    	<!-- 插件仓库,maven的运行依赖插件,也需要从私服下载插件 -->
        <pluginRepository>  
        	<!-- 插件仓库的id不允许重复,如果重复后边配置会覆盖前边 -->
            <id>public</id>  
            <name>Public Repositories</name>  
            <url>http://localhost:8081/nexus/content/groups/public/</url>  
        </pluginRepository>  
    </pluginRepositories>  
  </profile>  

  <activeProfiles>
    <activeProfile>dev</activeProfile>
  </activeProfiles>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值