Idea操作Maven详细使⽤:
Idea操作Maven详细使⽤:
Maven简介
什么是 Maven
Maven 的正确发⾳是[ˈmevən] "卖v",⽽不是“马瘟”以及其他什么瘟。
Maven 是⼀个项⽬管理⼯具,它包含了⼀个项⽬对象模型(POM:Project Object Model),⼀组标准集合。
Maven 能解决什么问题
如今我们构建⼀个项⽬需要⽤到很多第三⽅的类库 Jar包
如写⼀个使⽤Spring的Web项⽬就需要引⼊⼤量的jar包,
⽽往往⼀个Jar包往往⼜会引⽤其他Jar包,缺少其中任何⼀个Jar包都会导致项⽬编译失败。
每开发⼀个项⽬都会需要⼤量的Jar包 , ⼀个普通的Java项⽬也许实际源码只有⼏MB甚⾄KB,但加上Jar之后也许就⼏⼗MB。
⽽同样的项⽬,如果我们使⽤ Maven ⼯程来构建,那么总体上⼯程的⼤⼩会⼩很多。部署⾄服务器中...
Maven就是⼀款帮助程序员构建项⽬的⼯具,我们只需要告诉Maven需要哪些Jar 包,
它会帮助我们下载/提供所有的Jar,极⼤提升开发效率。
Maven 的两个经典作⽤:
依赖管理也就是管理jar包(涉及仓库知识,下⾯会讲)
Maven 的⼀个核⼼特性就是依赖管理。
当我们涉及到多模块的项⽬(包含成百个模块或者⼦项⽬),管理依赖就变成⼀项困难的任务。Maven 展⽰出了它对处理这种情形的⾼度控制。
传统的 WEB 项⽬中,我们必须将⼯程所依赖的 jar 包复制到⼯程中,导致了⼯程的变得很⼤。
那么maven ⼯程是如何使得⼯程变得很少呢?
Idea常见普通Maven项⽬⽬录:
maven⼯程中不直接将 jar包导⼊到⼯程中,⽽是通过在 l ⽂件中添加所需jar包的坐标。
这样就很好的避免了 jar 直接引⼊进来, 使⼯程变⼤  ~
在需要⽤到 jar 包的时候,再通过l⽂件中的坐标
到⼀个专门⽤于”存放 jar 包的仓库”(maven 仓库)中根据坐标从⽽到这些 jar 包拿去运⾏。
mediaplayer播放器下载
⽽且过程并不需要担⼼到仓库中到 jar 包这样会影响程序性能:
maven 中也有索引的概念,通过建⽴索引,可以⼤⼤提⾼加载 jar 包的速度,
使得我们认为 jar 包基本跟放在本地的⼯程⽂件中再读取出来的速度是⼀样的。
”存放 jar 包的仓库”长什么样?
仓库,顾名思义,也就是存放⼀些项⽬必备的粮⾷(jar包)的地⽅。Maven中仓库分为三类:
本地仓库:
存放在本地服务器中,当运⾏项⽬的时候,maven会⾃动根据配置⽂件查本地仓库,再从本地仓库中调⽤jar包使⽤。
远程仓库(私服):
当本地仓库中没有项⽬所需要的jar包时,那么maven会继续查远程仓库,⼀般远程仓库指的是公司搭建的私有服务器,也叫私服;
当jar包在私服中查到之后,maven会将jar包下载到本地仓库中,下次使⽤的时候就不⽤再去远程仓库。
中央仓库:
当远程仓库获取不到jar包时,就需要到中央仓库去查,并下载在远程仓库中,本地仓库再从远程仓库中下载回来使⽤。
此由maven团队维护,据说截⽌⾄16年,已经有2亿个包在仓库中!
可以这么说,我们需要的包⼀切来源都是中央仓库,并不需要担⼼没有jar包。
⼀键构建
项⽬从编译、测试、运⾏、打包、安装、部署整个过程都交给 maven进⾏管理,这个过程称为构建。
⼀键构建:指的是整个构建过程, 使⽤ maven⼏个命令可以轻松完成整个⼯作。
Maven 规范化构建流程如下:
这个⽬前知道就好, 下⾯结合项⽬实例详细讲解~感受;
IDEA使⽤Maven⼯程:
我的idea是中⽂的, ⽽且版本1.3的有差异的同学多多理解~
注意!使⽤Maven⼯程最好要在有⽹的情况下, 对于⼀些组件 Jar都是要联⽹下载的...
⾸先idea配置maven的安装⽬录和本地仓库
Idea每次创建⼀个新的Maven时候, 建议看看, 不然本地资源库错了Jar乱放到处下载...并不好~
⽂件——设值——输⼊框输⼊Mavenhtml写登录页面
启动⼯程!!
创建Maven项⽬:⽂件—新建——项⽬
Next (这⾥我先建⼀个普通的项⽬~了解Maven⽣命周期)
学习web的同学加载⼯程可能,会需要很长时间下载...慢慢等待即可~ 知道出现Src **⽹卡这种事情很⽆奈 **  Finish
这是我创建好的⼯程, 是不是觉得缺点什么。
Idea的⼯具并不是很完善对于⼀些⽂件,创建并不完整可以⾃⼰补全:基本就是上图的结构
⼿动在 test⽂件下创建⼀个 resources⽂件:并通过⼯具标识为资源⽂件
但要注意:target⽂件可不是⼿动创建的Maven项⽬⽣命周期⾃动⽣成的...主要⽤于存放:编译后的⽂件。经过上述⼀系列操作,其实就已经创建出了⼀个常规的 Maven项⽬⼯程:
| |----main 项⽬的主要代码的地⽅...
| | |----java ————--存放项⽬的源⽂件
| | |----resources ——存放项⽬资源⽂件,如spring, hibernate配置⽂件
| |----test ⽤于测试项⽬代码的, ⽬录相当于 Junit的测试代码的⽬录
| | |----java ————--存放所有测试.java⽂件,如JUnit测试类
| | |----resources ——存放项⽬测试资源⽂件,如spring, hibernate配置⽂件
在Main——Java⽬录:下创建⼀个包com.wsm包下Text.Jave建议⼀定要加包!!
public class Text {
public void show(){
System.out.println("Hello World");
}
}
// 这是⼀个,⾮常简单普遍的⼀段Jave代码~ 没⼈看不懂吧
在Test——Java⽬录:下创建⼀个包com.wsm包下TTest.Jave
主要⽤于测试, 上⾯的源码是否可以正常运⾏... 别想是不是有什么特殊功能就是这个!
import org.junit.Test;
public class TTest {        //类名必须,Test结尾(我真是⽆语了不知道这个调了好久..)
@Test                  //Junit注解:该⽅法进⾏单元测试,(需要Junit包~l引⼊Jar坐标)
public void testShwo(){  //⽅法名建议 test开头,规范..
//声明源码中的类,并调⽤show(); 测试结果~
Text t = new Text();
t.show();
}
}
这是只是基础的标签属性, 因为是基础⽽且太多了... 我就偷懒了..
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="/POM/4.0.0"
xmlns:xsi="/2001/XMLSchema-instance"
xsi:schemaLocation="/POM/4.0.0 /xsd/maven-4.0.0.xsd">
<!-- 指定当前pom模型的版本,maven2 和3都是4 -->
<!-- Pom⽂件可以⽤于解耦,最⼤程度区分项⽬与项⽬之间的区别 -->
<modelVersion>4.0.0</modelVersion>
<groupId&le</groupId>                  <!-- 定义项⽬是哪个公司哪个部门组 -->
<artifactId>MavenWSM</artifactId>              <!-- 组内的唯⼀id(例如项⽬中的哪个组件:模块名,Maven可以实现模块开发~) -->
<version>1.0-SNAPSHOT</version>                <!-- 项⽬当前版本,SNAPSHOT为不稳定版本(快速开发) -->
<!-- groupId  artifactId  version:也决定了项⽬在打包/发布⽂件的样式/地址:本地仓库下/org/example/MavenWSM/1.0-SNAPSHOT/MavenWSM-1.0-SNAPSHOT.jar  -->    <name>WSM</name>                                <!-- 项⽬别名 -->
<packaging>jar</packaging>                      <!-- 项⽬打包产⽣的构件类型,例如jar、war、ear、 常⽤Jar(默认) war -->
<!--Jar: ⼀般公司⾃⼰制作⽅便,开发调⽤的组件    war: 项⽬打包成war 可以部署⾄服务器中运⾏...的格式;  这⾥不是web⼯程所以不需要war jar即可~ -->
<!-- 为pom定义⼀些常量,在pom中的其它地⽅可以直接引⽤使⽤⽅式如下:${project.build.sourceEncoding} -->
<properties>
password游戏
<!-- 统⼀项⽬字符集编码: 底层引⽤了${project.build.sourceEncoding} 统⼀字符集  -->
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<!-- 设值jdk编码,该⽅法是指定项⽬的JDK版本或在l中配置统⼀环境JDK  -->
<mavenpiler.source>1.8</mavenpiler.source>
<mavenpiler.target>1.8</mavenpiler.target>
</properties>
<!-- 中存放着所有依赖包的描述,也就是提供下载的坐标 -->
<dependencies>
<!-- 每⼀个dependency 描述⼀个Jar坐标: 去本地————不到去私服下载————在没有去中央仓库下载到私服到本地.. -->
<dependency>
<groupId>junit</groupId>            <!-- 公司组 -->
<artifactId>junit</artifactId>      <!-- 项⽬/jar/模块名 -->
<version>4.9</version>              <!-- 版本 -->
<scope>test</scope>                <!-- Jar包使⽤的范围: 默认使⽤范围是compile,则测试代码和主代码都可以使⽤该代码; -->
<!-- <scope>system</scope>              <systemPath>引⼊Jar资源路径...</systemPath> -->
</dependency>
<!-- 省略其它更多Jar包的坐标.... -->
</dependencies>
<!-- build Maven的插件
该元素设置了项⽬源码⽬录,当构建项⽬的时候,构建系统会编译⽬录⾥的源码。-->
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.6.1</version>
<configuration>
<!-- 和上⾯功能⼀样都是设值JDK的版本的~ 随便设值⼀个即可; -->
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
</plugins>
</build>
</project>
1. dependencies——>dependency——>scope依赖范围
A 依赖 B,需要在 A 的 l ⽂件中添加
B 的坐标,添加坐标时需要指定依赖范围,依赖范围包括↓↓↓
compile:编译范围, 默认范围值,依赖会⽤在编译、测试、运⾏, 由于运⾏时需要所以编译范围的依赖会被打包。
provided:编译范围, provided 依赖在编译和测试时需要,在运⾏时不需要,⽐如:servlet api 运⾏时被 tomcat 容器提供。
(冲突反⽽会报错!)
runtime:编译范围,依赖在运⾏和测试系统的时候需要,但在编译的时候不需要。⽐如:jdbc驱动包。
test:编译范围,在编译和运⾏时都不需要,它们只有在测试编译和测试运⾏阶段可⽤。⽐如:junit。
system:编译范围, system 范围依赖与 provided 类似, 使⽤本地之外的路径的Jar 需要指定 systemPath 磁盘路径(不推
荐!)
2. 坐标的来源⽅式:
从互联⽹搜索: 1. 2.
通过这种⽅式在也不⽤到处Jar了直接来Maven中到坐标下载到本地就可以⽤了!
从其它同学的本地库cope 也是⼀种办法, 直接将整个仓库copy过来, 更改⼀下Setting 配置⽂件即可!~
运⾏测试:使⽤Maven进⾏⼀键构建
**我们可以直接在cmd中通过⼀系列的maven命令:**
来对我们的**MavenWSM⼯程进⾏:** 清理编译、测试、运⾏、打包、安装、部署。
到项⽬⼯程的本地路径:
可以在idea ⼯具中cope路径——Windows+r :复制回车快速打开⽂件;
在⽂件路径中输⼊ "cmd" 进⾏⽂件路径, ⽅便操作Maven命令; (或者也可以⾃⼰⼿动的 cd: 查切换路径..)
翻译intelligentMaven 常⽤命令
cmd 进⼊命令状态,执⾏ mvn compile,如下图提⽰成功:
compile 是 maven ⼯程的编译命令,作⽤是将 src/main/java 下的⽂件编译为 class ⽂件输出到 target⽬录下。
这时你的项⽬中就会出现 target⽂件夹:编译好的代码...
BUILD SUCCESS 编译成功!
cmd 执⾏ mvn clean 会删除 target ⽬录及内容, 清理。
cmd 执⾏ mvn test 执⾏src/test/java下单元测试类
cmd 执⾏ mvn package 对于 java ⼯程执⾏ package 打成 jar 包,对于 web ⼯程打成 war包。并且会包含 test操作;
cmd 执⾏ mvn install 执⾏ install 将 maven 打成 jar 包或 war 包发布到本地仓库。包含 package 和 test 操作;
cmd 执⾏ mvn deploy 执⾏ deploy 将 maven 打成 jar 包或 war 包发布到本地仓库和私服中。包含 package test install 操作;
cmd 执⾏ mvn clean test 先清理在test测试...
Idea⼯具可以直接通过双击:对应的⽣命周期即可:
最终项⽬结构:
编写Maven项⽬, 建议每⼀个main下源码是必须要有包的!因为项⽬打包package 发布是将main下的源⽂件打包~如果其中有⼀个单独的⽂件, 没有⼀个指定的包, 则默认放在META-INF⽬录下学过JSP同学都知道该⽬录下⽂件是只读的不可调的..
这就是Maven的⼀键构建。是不是超级有意思!!
Maven操作Web⼯程:
请按照上⾯案例创建web⼯程:
如果创建过程太慢可以借鉴:创建时候加:archetypeCatalog | internal会快很多,要注意⼀定要选择对Maven模型
之后的⼤致结构是这样的:
并不完整, 还需要⼿动添加 src/main/jave⽂件夹(并且要修改对应⽂件夹的类型,Jave源⽂件类型 resource资源⽂件类型...)
最终Web结构:
index.jsp
Idea⼯具的默认JSP,也并不符合规范, 这个就⾃⼰改改吧~
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>第⼀个maven⼯程</title>idea配置artifacts
</head>
<body>
Hello World!
</body>
</html>
之后就可以, 配置Idea的Tomcat 通过Maven构建项⽬Package war包部署⾄项⽬中~即可;
ok,就酱! 不需要修改任何代码~Idea启动服务则⾃动加载程序.
你在当前服务器中部署那些项⽬, 就可以执⾏那些项⽬, 即使你本地原先存在的项⽬但你没有部署 Idea配置的服务器也是访问不了的~ Maven项⽬使⽤⾃定义的jar
ok 到这⼉web⼯程也就写完了.
⾄于本⼈在 main——java——com.wsm.Test——cs 是本⼈的测试Demo
正常情况这⾥写的是:dao entity 程序代码(SSM SSH),可别被本⼈混乱了~
本次测试: ⼀个Maven项⽬引⼊另⼀个Maven项⽬程序:实现模块开发
<!-- 还记得这个吗? ⼀个普通的资源引⽤, 但!
仔细观察,这就是刚才写的组模块名版本...
Maven install将项⽬打包Jar⾄本地,其它Maven项即可直接 dependency 引⼊使⽤,该项⽬的类/⽅法~
是不是感觉越来越⾼级了....现在已经可以⾃⼰开发Jar ⽅便⽇后开发使⽤了呢~
-->
</dependencies>
<dependency>
<groupId&le</groupId>
<artifactId>MavenWSM</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
</dependencies>
手机怎么剪辑视频教程
cs.java
import com.wsm.Text;  //这⾥的com.wsm.Text是引⼊项⽬的包,如果没有包的话⽂件存在MATE——INF是⽆法引⼊的!(所以建议源码都放在包下~⼀种规范吧!) public class CS {
public static void main(String[] args) {
//创建⾃定义Jar包中的类对象,调⽤⽅法();
Text text = new Text();
text.show();
}
}
直接右击, run ! “Hello World”
Maven安装:
.
最后的最后, 终于写完了,求个赞 呀!