尚硅⾕maven视频教程笔记07.尚硅⾕_Maven_部署Maven核⼼程序.avi
第⼀步先安装jdk
第⼆步下载maven
特别需要注意的是maven不能存储在有中⽂和空格的⽬录下⾯
3.调试是否安装成功,在cmd中输⼊ mvn -version
08.尚硅⾕_Maven_约定的⽬录结构说明.avi
3.第⼀个Maven⼯程
①⽬录结构
Hello
|---src
|---|---main
|---|---|---java
|---|---|---resources
|---|---test
|---|---|---java
|---|---|---resources
|---l
<groupId>com.atguigu.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>
③编写主程序代码
在src/main/java/com/atguigu/maven⽬录下新建⽂件Hello.java,内容如下
package com.atguigu.maven;
public class Hello {
public String sayHello(String name){
return "Hello "+name+"!";
}
}
④编写测试代码
在/src/test/java/com/atguigu/maven⽬录下新建测试⽂件HelloTest.java
package com.atguigu.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);
}
}
⑤运⾏⼏个基本的Maven命令
mvn compile 编译
mvn clean 清理
mvn test 测试
mvn package 打包
※注意:运⾏Maven命令时⼀定要进⼊l⽂件所在的⽬录!
⽬录如下
我们进⼊到l所在的⽬录执⾏上⾯的命令
当前例如是adminstrator⽤户
maven默认的本地仓库的位置是:
在d盘的D:\RepMaven⽂件夹中我们下载好了maven所需的jar包,我们可以修改maven本地仓库的地址执⾏该⽬录
我们到maven解压⽬录下的conf⽂件夹下⾯的l修改如下
Maven是当前流⾏的项⽬管理⼯具,但官⽅的库在国外经常连不上,连上也下载速度很慢。国内oschina的maven服务器很早之前就关了。今天发现阿⾥云的⼀个中央仓库,亲测
可⽤。
修改l⽂件,在<mirrors>标签下加⼊上述内容即可
<mirror>
<id>alimaven</id>
<mirrorOf>central</mirrorOf>
<name>aliyun maven</name>
<url>maven.aliyun/nexus/content/repositories/central/</url>
</mirror>
12.尚硅⾕_Maven_POM.avi
接下来我们来学习maven的依赖,我们创建⼀个maven⼯程,依赖我们的上⾯第⼀个Hello这个⼯程,要依赖Hello⼯程,我们要使⽤maven install命令,将Hello这个⼯程添加到
本次仓库中
4.第⼆个Maven⼯程
①⼯程名:HelloFriend
②⽬录结构与第⼀个Maven⼯程相同
③POM⽂件
<?xml version="1.0" ?>
<project xmlns="/POM/4.0.0" xmlns:xsi="/2001/XMLSchema-instance" xsi:schemaLocation="/POM/4.0.0 /xsd/maven-4.0.0.xsd" <modelVersion>4.0.0</modelVersion>
<groupId>com.atguigu.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.atguigu.maven</groupId>
<artifactId>Hello</artifactId>
<version>0.0.1-SNAPSHOT</version>
<scope>compile</scope>
</dependency>
</dependencies>
</project>
④主程序:在src/main/java/com/atguigu/maven⽬录下新建⽂件HelloFriend.java
package com.atguigu.maven;
import com.atguigu.maven.Hello;
public class HelloFriend {
public String sayHelloToFriend(String name){
Hello hello = new Hello();
String str = hello.sayHello(name)+" I am "+MyName();
System.out.println(str);
return str;
}
public String getMyName(){
return "John";
}
}
⑤测试程序:在/src/test/java/com/atguigu/maven⽬录下新建测试⽂件HelloFriendTest.java
package com.atguigu.maven;
import static junit.framework.Assert.assertEquals;
import org.junit.Test;
import com.atguigu.maven.Hello;
public class HelloFriendTest {
@Test
public void testHelloFriend(){
HelloFriend helloFriend = new HelloFriend();
String results = helloFriend.sayHelloToFriend("litingwei");
assertEquals("Hello litingwei! I am John",results);
}
}
在上⾯的HelloFriend中
<scope>test</scope> 依赖的junit对应的范围是测试程序才有效果,对主程序没有效果,test表⽰测试范围内的依赖
<scope>compile</scope>依赖的Hello jar包在主程序中可以使⽤,在测试test模块中也可以使⽤,都可以直接new Hello对象,complie表⽰测试范围和主程序都要有效
例如如果使⽤compile依赖spring的jar,该spring的jar就会被打包在应⽤中,并且因为tomcat容器没有提供该spring的jar包,就会被部署到容器中,compile指定的jar包在主程序
和测试程序都有效,会随项⽬发布
例如如果使⽤test依赖junit的jar,compile指定的jar包只能在测试程序中有效,不会部署不会打包在应⽤中,只在测试时使⽤,⽤于编译和运⾏测试代码。不会随项⽬发布。
对应privodie修饰的jar包,在主程序和测试程序都有效,privide默认tomcat容器会提供该jar包,所以不会被打包也不会被部署到应⽤服务器中,类似compile,期望JDK、容器或
使⽤者会提供这个依赖。如servlet.jar。
接下来,我们讲解如何在myeclipse上⾯新建使⽤maven建⽴web⼯程
第⼀步
将第⼀个选项enable Maven4MyEclipse 这个选择上
第⼆步新建⽴⼀个web⼯程
这⾥把add maven sporrt勾选上。如果没有第⼀步的操作,这⾥就没有add maven support这个选项
接下来填写你的maven坐标。勾选stander这个选项
这⾥上默认不勾选
我们来看看l
<project xmlns="/POM/4.0.0" xmlns:xsi="/2001/XMLSchema-instance" xsi:schemaLocation="/POM/4.0.0 /xsd/maven-4.0.0.xsd" <modelVersion>4.0.0</modelVersion>
<groupId>com.weiyuan.maven</groupId>
<artifactId>Hello</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>war</packaging>
<name>MavenWeb</name>
<description/>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<build>
<plugins>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.3.2</version>
<configuration>
<source>1.6</source>
<target>1.6</target>
</configuration>
</plugin>
<plugin>
<artifactId>maven-war-plugin</artifactId>
<version>2.2</version>
<configuration>
<version>3.0</version>
<failOnMissingWebXml>false</failOnMissingWebXml>
</configuration>
</plugin>
</plugins>
</build>
</project>
在上⾯创建的⽂件夹中index.jsp有红叉,是因为缺少sevlet这个依赖
我们在l中添加servlet的依赖
<project xmlns="/POM/4.0.0" xmlns:xsi="/2001/XMLSchema-instance" xsi:schemaLocation="/POM/4.0.0 /xsd/maven-4.0.0.xsd" <modelVersion>4.0.0</modelVersion>
<groupId>com.weiyuan.maven</groupId>
<artifactId>Hello</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>war</packaging>
<name>MavenWeb</name>
<description/>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<build>
<plugins>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.3.2</version>maven打包本地jar包
<configuration>
<source>1.6</source>
<target>1.6</target>
</configuration>
</plugin>
<plugin>
<artifactId>maven-war-plugin</artifactId>
<version>2.2</version>
<configuration>
<version>3.0</version>
<failOnMissingWebXml>false</failOnMissingWebXml>
</configuration>
</plugin>
</plugins>
</build>
<dependencies>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>2.5</version>
<scope>provided</scope>
</dependency>
</dependencies>
</project>
这样index.jsp就不会出现错误了,千万要注意scope是provide,如果写成compile ,该jar就会部署到tomcat中,tomcat容易中也存在该servlet jar,就会存在jar的冲突
接下来还有两个地⽅需要配置的
上⾯install要选择我们解压在本地的maven按照⽬录
user setting选择我们本地maven解压下的l
上⾯这两个配置在myeclipse⼯作区间发⽣变化的时候都需要重新配置
接下⾯我们讲解如何导⼊maven⼯程
选择maven⼯程所在的⽬录,导⼊就可以了
接下来我们讲解下maven的依赖性
我们在上⾯创建了两个maven项⽬。hello 和hellofreind
hellofriend依赖hello,hello已经使⽤mvn install 安装到了本地的仓库中
下⾯在我们在hello中添加了⼀个spring的依赖
在hellofreiend中会⾃动加载hello中引⼊的依赖,这就是依赖的传递性,hello直接依赖spring ,hellofriend间接依赖spring
上⾯的hello就是所谓的最下⾯,但是主要⾮compile范围的不能被传递
接下⾯我们讲解下依赖的排除
上⾯hello中存在log的jar包,会⾃动的传递到HelloFriend中,但是如果helloFreien中不想需要这个log依赖如何处理了,在hellofriend的l中
接下来我们分析下maven依赖的原则
makefreind依赖hellofriend ,hellofrien依赖hello
hello中使⽤了log4j 1.2.17版本,hellofrien中使⽤了1.2.104版本,按照上⾯依赖的传递性,makefriend就会存在1.2.17和1.2.14版本,这⾥时候使⽤哪个版本了,安装就近原则,makefriend依赖hellofreind⽐较近,相当于hellofriend是makefreind的爸爸,hello是她的也爷爷
隔爸爸⽐较近,就使⽤爸爸中的
接下⾯我们看第⼆个场景
makefreind有两个爸爸
这个时候如何选择了,这个时候就看那个先使⽤depency声明就使⽤那个,在makefrien的pom,xml中那个先声明就使⽤那个
接下来我们讲解proprert标签在maven中的使⽤
我们在l中依赖了很多jar包,都是4.0.0版本的,我们需要在下次运⾏的时候统⼀升级成4.1.0版本,就可以使⽤propetiies
接下⾯我们讲解下maven的继承,要实现junit因为junt是test范围的,每个项⽬使⽤都要⾃⼰配置,下⾯可以使⽤⽗⼯程来解决这个问题
第⼀步先创建⼀个⽗亲⼯程
这⾥是最关键的对于⽗亲⼯程,对于的打包⽅式⼀定要选择为pom⽅式,如果是java⼯程选择jar,web⼯程选择war
这就是⽗亲⼯程的⽬录结构
接下来,在⼦⼯程中声明对⽗亲⼯程的引⽤
我们在hello⼦⼯程的l中引⽤付⼯程
<?xml version="1.0" ?>
<project xmlns="/POM/4.0.0" xmlns:xsi="/2001/XMLSchema-instance"
xsi:schemaLocation="/POM/4.0.0 /xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<artifactId>Hello</artifactId>
<!-- ⼦⼯程中声明⽗⼯程 -->
<parent>
<groupId>st</groupId>
<artifactId>Parent</artifactId>
<version>0.0.1-SNAPSHOT</version>
<!-- 以当前⽂件为基准的⽗⼯程l⽂件的相对路径 -->
<relativePath>../l</relativePath>
</parent>
<properties>
<atguigu.spring.version>4.1.1.RELEASE</atguigu.spring.version>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<name>Hello</name>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>${atguigu.spring.version}</version>
<scope>compile</scope>
</dependency>
<!-- <dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId>
<version>1.2.17</version> </dependency> -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>${atguigu.spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>${atguigu.spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-orm</artifactId>
<version>${atguigu.spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>${atguigu.spring.version}</version>
</dependency>
</dependencies>
</project>
上⾯引⽤的是⽗⼯程的坐标,其中 <relativePath>../l</relativePath>表⽰⼀当前hello的l为坐标寻⽗亲⼯程的l对应的位置,⾸先后退到上⼀节⽬
录就是Hello⽬录,parent⽬录和Hello在同⼀级⽬录
接下来在⽗⼯程中配置需要被管理的对象,例如junt
<project xmlns="/POM/4.0.0" xmlns:xsi="/2001/XMLSchema-instance" xsi:schemaLocation="maven.apach
<groupId>st</groupId>
<artifactId>Parent</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>pom</packaging>
<!-- 配置版本统⼀管理 -->
<dependencyManagement>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
</dependencyManagement>
<build/>
</project>
接下来在⼦⼯程中对应的junit配置删除就可以了。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论