https://mvnrepository.com/search?q=spring
Maven的优势说明
- 在传统项目中,创建javaWeb工程,建立目录结构(java源文件存放目录,配置文件存放目录,jsp文件存放目录等)。每个人存放目录的习惯不一样,造成目录的命名,结构等千变万化,没有一个统一的标准
- 在传统项目中,开发一个javaWeb工程都会使用框架,主流的框架有ssm,ssh等。框架中包含大量的jar包(例如完整的ssm框架大致就有70个左右的jar),这使得工程难以管理,拷贝较为麻烦。
- Maven的优势是
- 目录结构标准化
- 项目管理起来更加简单,依赖jar包可以通过pom.xml进行管理
例如我们希望javaWeb1,javaWeb2,javaWeb3的工程目录结构化标准化,依赖jar可以通过配置进行管理
可以通过maven进行管理
maven的作用
- 管理Jar
- 增加第三方Jar(commons-fileupload.jar commons-io.jar)
- jar包之间的依赖关系(commons-fileupload.jar 自动关联所有依赖的jar,并且不会冲突)
1.清理:删除编译的结果,为重新编译做准备。
2.编译:java -> class
3.测试:针对于 项目中的关键点进行测试,亦可用 项目中的测试代码 去测试开发代码;
4.报告:将测试的结构 进行显示
5.打包:将项目中包含的多个文件 压缩成一个文件,用于安装或部署
6.安装:将打成的包,放到 本地仓库。
7.部署:将打成的包,放到 服务器上准备运行。
自动化构建工具maven:将原材料(java,js,css,html,图片)-> 产品(可发布项目)
本地仓库,中央仓库,中央仓库镜像(对中央仓库的分流)
通常下载一个jar依赖,先在本地仓库中下载;如果本地仓库不存在,在联网到中央仓库(镜像)去下载
Maven 的使用
- 下载配置maven
- 配置JAVA_HOME
- 配置MAVEN_HOME
- 配置path %MAVEN_HOME%\bin
- 验证mvn -v
- 配置本地仓库 mvn -v 可以查询到Maven home: /Users/lijunyang/apache-maven-3.6.1的目录,到此目录的conf目录下,vi settings.xml,找到Default: ${user.home}/.m2/repository,在用户根目录中mkdir mvnrep,然后在settings.xml中刚才查找到的地方加入标签元素
/Users/lijunyang/mvnrep - 通过命令创建maven项目
mvn archetype:generate -DgroupId=com.lijunyang.app -DartifactId=my-app -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false
``` 通过上面命令创建的maven项目,会在当前目录中生成一个my-app的目录 其中-DgroupId=com.lijunyang.app 配置pom.xml的groupId属性值 -DartifactId=my-app 表示目录名称,以及pom.xml的name属性的值 pom.xml文件内容如下
/my-app -| pom.xml -| src -| main -| java -| com -| lijunyang -| app -| App.java -| test -| java -| com -| lijunyang -| app -| AppTest.java
8. 断言测试的编写
```java
// /my-app/src/main/java/com/lijunyang/app/HelloWorld.java
package com.lijunyang.app;
public class HelloWorld {
public String sayHello(String name) {
return "hello " + name;
}
}
// /my-app/src/test/java/com/lijunyang/app/HelloWorldTest.java
package com.lijunyang.app;
import org.junit.Test;
import static junit.framework.Assert.*;
public class HelloWorldTest {
@Test
public void testHello(){
HelloWorld hello = new HelloWorld();
String result = hello.sayHello("zs");
assertEquals("hello zs", result); // 断言
}
}
- 运行命令
执行mvn的常用指令,必须在pom.xml所在目录中执行
第一次执行命令时,会下载命令依赖的基础环境,所以会从中央仓库下载该环境到本地仓库
- mvn compile; // 编译 只编译main目录中的,会放入target目录中
mvn test; // 编译,并执行用例 test目录中的,会放入target目录中
如果断言未通过,会抛出异常,此功能非常好用
mvn clean test; // 编译,并执行测试用例
- mvn package; // 打包 jar/war,会放入target目录中
mvn install; // 将开发的模块 放入本地仓库,供其他模块使用
打包完成后,会发布到本地仓库 /Users/lijunyang/apache-maven-3.6.1/conf/my-app/pom.xml to /Users/lijunyang/mvnrep/com/lijunyang/app/my-app/1.0-SNAPSHOT/my-app-1.0-SNAPSHOT.pom
mvn clean; // 清理,删除target目录,删除编译的文件和目录
- mvn build; // 编译
- mvn generator-sources
maven的注意项
约定 优于 配置
硬编码方式:job.setPath(“d:\abc”);
配置方式:job : conf.xmld:\abc
约定方式:job : 使用默认值d:\abc
maven约定的目录
main 执行项目 程序功能代码
java目录 java代码
resources目录 资源代码,配置代码
test 测试项目 测试代码
java目录 java代码
resources目录 资源代码,配置代码
-| pom.xml #项目对象模型
-| target
-| src
-| main #执行项目
-| java #java代码
-| com
-| lijunyang
-| model
-| HelloWorld.java
-| resources #资源代码,配置代码
-| test #测试代码
-| java #java代码
-| com
-| lijunyang
-| HelloWorldTest.java
-| resources #资源代码,配置代码
A中某些类,需要使用B中的某些类,则称为A依赖于B
在maven项目中,如果要使用 一个当时存在的Jar或模块,则可以通过 依赖实现 (去本地仓库,中央仓库中去寻找)
<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">
<modelVersion>4.0.0</modelVersion>
<!-- 大项目id,常用域名翻转 -->
<groupId>com.lijunyang.app</groupId>
<!-- 项目名 -->
<artifactId>my-app</artifactId>
<packaging>jar</packaging>
<!-- 版本号 -->
<version>1.0-SNAPSHOT</version>
<name>my-app</name>
<url>http://maven.apache.org</url>
<!-- dependencies 依赖项 -->
<dependencies>
<!-- dependency 依赖 -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
</dependencies>
</project>
Maven依赖、依赖有效性、Eclipse中使用Maven、生命周期
Maven在编译,测试,运行时项目时,各自使用一套classpath
compile(默认) test provided
编译 yes no yes
测试 yes yes yes
部署 yes no no
在Eclipse中创建maven工程:
1.配置maven:
配置maven版本
配置本地仓库: 设置setting.xml
在Eclipse中配置好pom.xml依赖后,需要maven-update project
package:
resources
compile
test
package
maven 生命周期:
生命周期和构建的关系:
生命周期中的顺序:a b c d e
当我们执行c命令,则实际执行的时a b c
<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">
<modelVersion>4.0.0</modelVersion>
<!-- 大项目id,常用域名翻转 -->
<groupId>com.lijunyang.app</groupId>
<!-- 子模块id名 -->
<artifactId>my-app</artifactId>
<packaging>jar</packaging>
<!-- 版本号 -->
<version>1.0-SNAPSHOT</version>
<name>my-app</name>
<url>http://maven.apache.org</url>
<!-- dependencies 依赖项 -->
<dependencies>
<!-- dependency 依赖 -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>4.3.7.RELEASE</version>
<exclusions>
<exclusion>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
</exclusion>
</exclusions>
</dependency>
</dependencies>
</project>