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包导入到工程中,而是通过在 pom.xml 文件中添加所需jar包的坐标

这样就很好的避免了 jar 直接引入进来, 使工程变大~

在需要用到 jar 包的时候,再通过pom.xml文件中的坐标

到一个专门用于”存放 jar 包的仓库”(maven 仓库)中根据坐标从而找到这些 jar 包拿去运行。

而且过程并不需要担心 到仓库中找到 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乱放到处下载...并不好~

文件——设值——输入框输入Maven

启动工程!!

创建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包~Pom.xml引入Jar坐标)
public void testShwo(){ //方法名建议 test开头,规范..
//声明源码中的类,并调用show(); 测试结果~
Text t = new Text();
t.show();
}
}

pom.xml

这是只是基础的标签属性, 因为是基础而且太多了... 我就偷懒了..

<?xml version="1.0" encoding="UTF-8"?>
<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"> <!-- 指定当前pom模型的版本,maven2 和3都是4 -->
<!-- Pom文件可以用于解耦,最大程度区分项目与项目之间的区别 -->
<modelVersion>4.0.0</modelVersion> <groupId>org.example</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、pom... 常用Jar(默认) war -->
<!--Jar: 一般公司自己制作方便,开发调用的组件Jar... war: 项目打包成war 可以部署至服务器中运行...的格式; 这里不是web工程所以不需要war jar即可~ --> <!-- 为pom定义一些常量,在pom中的其它地方可以直接引用 使用方式 如下 :${project.build.sourceEncoding} -->
<properties>
<!-- 统一项目字符集编码: 底层引用了${project.build.sourceEncoding} 统一字符集 -->
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<!-- 设值jdk编码,该方法是指定项目的JDK版本 或 在Maven settings.xml中配置统一环境JDK -->
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.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>

Pom.xml 详解:这里我会不定时的扩展,更新的哟~

  1. dependencies——>dependency——>scope依赖范围



    A 依赖 B,需要在 A 的 pom.xml 文件中添加 B 的坐标,添加坐标时需要指定依赖范围,依赖范围包括↓↓↓

    compile:编译范围, 默认范围值,依赖会用在编译、测试、运行, 由于运行时需要所以编译范围的依赖会被打包。

    provided:编译范围, provided 依赖在编译和测试时需要,在运行时不需要,比如:servlet api 运行时被 tomcat 容器提供。(冲突反而会报错!)

    runtime:编译范围,依赖在运行和测试系统的时候需要,但在编译的时候不需要。 比如:jdbc驱动包。

    test:编译范围,在编译和运行时都不需要,它们只有在测试编译和测试运行阶段可用。比如:junit。

    system:编译范围, system 范围依赖与 provided 类似, 使用本地之外的路径的Jar 需要指定 systemPath 磁盘路径(不推荐!)
  2. 坐标的来源方式:

    从互联网搜索: 1. http://search.maven.org/ 2.http://mvnrepository.com/

    通过这种方式在也不用到处找Jar了直接来Maven中找到坐标下载到本地就可以用了!

    从其它同学的本地库cope 也是一种办法, 直接将整个仓库copy过来, 更改一下Setting 配置文件即可!~

运行测试:使用Maven进行一键构建

  **我们可以直接在cmd中通过一系列的maven命令:**
来对我们的**MavenWSM工程进行:** 清理 编译、测试、运行、打包、安装、部署。

找到项目工程的本地路径:

可以在idea 工具中cope路径——Windows+r :复制回车快速打开文件;

在文件路径中输入 "cmd" 进行文件路径, 方便操作Maven命令; (或者也可以自己手动的 cd: 查找切换路径..)



Maven 常用命令

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 发布install...是将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" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>第一个maven工程</title>
</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 service comtroller....程序代码(SSM SSH),可别被本人混乱了~


本次测试: 一个Maven项目引入另一个Maven项目程序:实现模块开发

pom.xml

    <!-- 还记得这个吗? 一个普通的资源引用, 但!
仔细观察,这就是刚才写的 组 模块名 版本...
Maven install将项目打包Jar至本地,其它Maven项即可直接 dependency 引入使用,该项目的类/方法~
是不是感觉越来越高级了....现在已经可以自己开发Jar 方便日后开发使用了呢~
--> </dependencies>
<dependency>
<groupId>org.example</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安装:

请单击.

最后的最后, 终于写完了, 求个赞呀!

Idea操作Maven详细使用:的更多相关文章

  1. 【极力分享】[C#/.NET]Entity Framework(EF) Code First 多对多关系的实体增,删,改,查操作全程详细示例【转载自https://segmentfault.com/a/1190000004152660】

      [C#/.NET]Entity Framework(EF) Code First 多对多关系的实体增,删,改,查操作全程详细示例 本文我们来学习一下在Entity Framework中使用Cont ...

  2. centos的用户、组权限、添加删除用户等操作的详细操作命令

    1.Linux操作系统是多用户多任务操作系统,包括用户账户和组账户两种 细分用户账户(普通用户账户,超级用户账户)除了用户账户以为还 有组账户所谓组账户就是用户账户的集合,centos组中有两种类型, ...

  3. Maven详细介绍

    Maven 目录 1 什么是Maven? 2 Maven 的好处 3 获取和安装 3.1 获取 3.2 安装 3.2.1 环境变量的配置 4 设置本地仓库 5 创建简单的Maven实例 5.1 使用骨 ...

  4. 【转】Maven详细

    Maven maven 中央仓库 网站 https://mvnrepository.com/ 全世界 发布到Maven仓库 供用类着使用 maven 本质上下载工具和构建工具 下载工具 迅雷 只能下载 ...

  5. 【甘道夫】HBase基本数据操作的详细说明【完整版,精绝】

    介绍 之前具体写了一篇HBase过滤器的文章.今天把基础的表和数据相关操作补上. 本文档參考最新(截止2014年7月16日)的官方Ref Guide.Developer API编写. 全部代码均基于& ...

  6. PHP 操作redis 详细讲解转的

    http://www.cnblogs.com/jackluo/p/3412670.html phpredis是redis的php的一个扩展,效率是相当高有链表排序功能,对创建内存级的模块业务关系 很有 ...

  7. Intellij idea操作maven时控制台中文乱码

    只留存记录 windows环境下,Intellij idea12中maven操作时,控制台中文乱码问题(编译报错或者clean install时出现的其他错误描述乱码) 在cmd中mvn中文正常显示, ...

  8. java操作Maven

    记录瞬间 import org.dom4j.Document; import org.dom4j.DocumentException; import org.dom4j.Element; import ...

  9. PHP操作redis详细讲解(转)

    PHP中redis的使用   redis是一个key-value存储系统.和Memcached类似,它支持存储的value类型相对更多,包括string(字符串).list(链表).set(集合)和z ...

  10. Linux 记录所有用户登录和操作的详细日志

    1.起因 最近Linux服务器上一些文件呗篡改,想追查已经查不到记录了,所以得想个办法记录下所有用户的操作记录. 一般大家通常会采用history来记录,但是history有个缺陷就是默认是1000行 ...

随机推荐

  1. XSS 前端防火墙 —— 天衣无缝的防护

    上一篇讲解了钩子程序的攻防实战,并实现了一套对框架页的监控方案,将防护作用到所有子页面. 到目前为止,我们防护的深度已经差不多,但广度还有所欠缺. 例如,我们的属性钩子只考虑了 setAttribut ...

  2. keycode

    <script type="text/javascript" language=JavaScript charset="UTF-8"> docume ...

  3. Java基础-继承 利用接口做参数,写个计算器,能完成+-*/运算

    38.利用接口做参数,写个计算器,能完成+-*/运算 (1)定义一个接口Compute含有一个方法int computer(int n,int m); (2)设计四个类分别实现此接口,完成+-*/运算 ...

  4. 详解Paint的各种set方法

    一.前言 我们用set方法来设置画笔的样式,类似于我们挑选画笔画画的过程.由于上面有些方法不支持硬件加速,所以在高版本系统中可能会没有效果.因此,我们首先来看看官方废弃的方法. 下图来自:https: ...

  5. Python学习路程day3

    set集合 ​set是一个无序且不重复的元素集合,访问速度快,天生解决重复问题 s1 = set() s1.add('luo')​ s2 = set (['luo','wu','wei','ling' ...

  6. wifi密码破解-Linux工具篇-video

    链接: https://pan.baidu.com/s/1eREVoH0 密码: ajk5 博客地址:http://www.cnblogs.com/XieMinQiang/          (长按图 ...

  7. 【Hadoop学习】CDH5.2安装部署

    [时间]2014年11月19日 [平台]Centos 6.5 [工具]scp [软件]jdk-7u67-linux-x64.rpm CDH5.2.0-hadoop2.5.0 [步骤] 1. 准备条件 ...

  8. Linux系统编程---实现目录或者文件拷贝

    关于拷贝文件,前面写过一个例子:点击打开链接 ,可以看看,实现cp命令. 这次我们实现一个目录和文件的拷贝,综合点. #include <stdio.h> #include <fcn ...

  9. 开源项目Git地址

     1.陈明.李建勋.邓覃思   fog-aliyun https://git.oschina.net/dengqinsi/fog-aliyun.git 2.吴俊.骆仲军.袁良福   CDN的H5助 ...

  10. LARS 最小角回归算法简介

    最近开始看Elements of Statistical Learning, 今天的内容是线性模型(第三章..这本书东西非常多,不知道何年何月才能读完了),主要是在看变量选择.感觉变量选择这一块领域非 ...