搞了一天总算是基本学会了idea上用Maven管理Web应用的开发,因为idea也是最近一两年才崛起,之前基本是eclipse的编写,现在网上Maven的视频教程几乎全是用eclipse教的,能搜到的教idea上Maven项目的博客也是很少的,就此记录下学习的全过程。

Maven的简介:

比较正式的说明:Maven是一个项目管理和综合工具。Maven提供了开发人员构建一个完整的生命周期框架。开发团队可以自动完成项目的基础工具建设,Maven使用标准的目录结构和默认构建生命周期。
在多个开发团队环境时,Maven可以设置按标准在非常短的时间里完成配置工作。由于大部分项目的设置都很简单,并且可重复使用,Maven让开发人员的工作更轻松,同时创建报表,检查,构建和测试自动化设置。

用中国话说:当项目庞大的时候,需要导入的jar包很多,这些之间也可能有重复和冗余,文件之间也有很多依赖关系,Maven就是集中管理jar包和依赖关系的一个工具,可以使得开发更便利高效


首先来到idea的file目录下选择new一个project,这样选择

ider 如何 给java项目添加maven idea项目加入maven_xml

点next

ider 如何 给java项目添加maven idea项目加入maven_idea_02

起名的一般规则:GroupId如果是企业项目就是com.+项目名,否则是org.+项目名,ArtifactId填项目名字,点next

ider 如何 给java项目添加maven idea项目加入maven_jar包_03

点旁边绿色的加号,加一个这个东西可以使你的项目载入快一些,其他保持默认设置后next,然后也是保持默认设置点finish

就会自动帮你配置maven项目,如果是第一次创建项目可能要等比较久下载一些东西,后面会更快一些,我的等了差不多一两分钟。。。不知道是不是电脑太烂

ider 如何 给java项目添加maven idea项目加入maven_maven_04

然后创建成功的目录结构有些不完整,我们需要手动加入一些东西:

ider 如何 给java项目添加maven idea项目加入maven_xml_05

加入的东西通过在父目录右击new directory创建相应名字的文件,然后也是右击创好的文件mark  directory as调成我上面图形的样子,说明一下,java目录下放你项目的package包,package包下放你的java文件,因为项目中会用到JUnit来单元测试,那么java类中生成的对应的JUnit的类就应该放在test文件的java目录下的package包中,然后就可以开始写程序了

然后说一下maven的命令:

maven的命令格式都是mvn+空格+命令

-v 查看maven版本

compile 编译当前项目

test 测试当前项目

package  将当前maven管理的项目打包

clean 删除上一次生成的target文件,里面有各种配置文件

install 安装xml中代码指向的jar包到本地仓库

然后摘取一些慕课网的笔记..虽然现在还蛮多不是很明白,先收集起来以后看看:

pom.xml常用标签元素:
 modelVersion  指定了当前pom版本
 groupId    反写的公司网址+项目名
artifactId  项目名+模块名
version     版本号  第一个0表示大版本号,第二个0表示大版本号,第三个0表示大版本号 0.0.1snapshot快照
packaging   打包方式 默认是jar

name       项目的描述名
url       项目的地址
description  项目描述
developers   开发人员信息
licenses    许可证信息

dependencies 
dependency
scope    依赖范围
optional  设置依赖是否可选
exclusion   

dependencyManagement   依赖管理  不会被运行
build   
  plugins  插件列表(指出坐标)
parent    对父模块的继承
modules   定义多个模块  一起进行编译


dependency scope:指定依赖范围
 --compiler:默认的范围,编译测试运行都有效
 --provided:编译测试时有效
 --runtime:测试和运行时有效
 --test:测试时有效
 --system:与本机系统相关联,可移植性差
 --import:导入的范围,只在dependencyManagement中使用,表示从其他的pom中导入dependency的配置



依赖具有传递性所以如果需要去除不需要的依赖则
<exclusions>
<groupId>项目ID</groupId>
<artifactID>项目名+模块名</artifactID>
</exclusions>



依赖冲突的解决
1.短路优先:
A->B->X(v1.0),A->C->D->X(v2.0)
A-->X(v1.0)
2.声明顺序:
A->B->X(v1.0),A->C->X(v2.0),A-pom.xml: ... <dep C> <dep B> ... 
A-->X(v2.0)
路径长度相同时,哪个dependency先在pom.xml声明,哪个就优先




继承
1.应用场景:组件聚合时,多个组件使用相同的依赖导致聚合后出现重复,使用一个父组件定义该依赖,然后有需要的组件继承该组件,聚合时就不会重复
2.父组件定义依赖
在父组件-->dependencyManager-->dependencies下定义dependency
注意,dependencyManager下定义的dependency,该组件不依赖
3.继承父组件
parent标签下引用父组件的坐标
创建dependency引用,只有groupId和artifactId子元素


继承 子pom.xml的写法,先
<parent>
<groupId>项目ID</groupId>
...
...
<parent>


聚合(将多个模块聚合)
1.创建聚合项目 proj-aggreation
2.packaging为pom
3.使用modules定义要聚合的模块
<modules>
<module>../proj-m1</module>
<module>../proj-m2</module>
</modules>

关于maven的原理和指令的一些细节我在慕课网上讲网课看了几遍也不是特别理解。。就不说了吧,我就说下我现在掌握的maven的基本使用方法

来到pom.xml,maven的主要实现就是通过修改这个文件来对jar包和依赖关系进行控制

从上往下我们就说几个重要的参数来快速掌握maven用法:

<groupId>org.xxx</groupId>
  <artifactId>exam</artifactId>
  <packaging>war</packaging>

前两个标签groupid和artifactid相当于当前项目的横纵坐标一样,对依赖关系的设置也是通过该参数实现的,packaging参数表示打包的方法,上面慕课网笔记中有


<dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
      <scope>test</scope>
    </dependency>
  </dependencies>

这些参数声明了当前项目的依赖关系,也就是需要导入这些包,

groupId,artifactId,version这三个参数在导入外来的jar包时必不可少,准确的表述了导入的jar包,以便于maven在仓库中查找,scope表示该包的作用范围,上面慕课网的笔记总有教

在build标签中写上plugins标签下plugin中可以写三个参数,然后使用mvn的install命令,maven会在本地仓库中找是否有该参数的jar包,如果没有他会去setting那指定的全球仓库中找,找到了就会下载到当前项目,再通过上面的依赖设置就可以使用了

<build>
    <plugins>
      <plugin>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.12</version>
      </plugin>
    </plugins>
  </build>

我觉得下完了应该可以删了这段代码OAO

然后下面是我写的一个测试maven的程序:

pom.xml:

<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>
  <groupId>org.xxx</groupId>
  <artifactId>exam</artifactId>
  <packaging>war</packaging>
  <version>1.0-SNAPSHOT</version>
  <name>exam Maven Webapp</name>
  <url>http://maven.apache.org</url>
  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.12</version>
      <scope>compile</scope>
    </dependency>
  </dependencies>
  <build>
    <plugins>
      <plugin>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.12</version>
      </plugin>
    </plugins>
  </build>
</project>

写好这个点击idea左下角的一个小框框,选Terminal调出终端

输入mvn clean package会自动清除之前的记录并编译打包程序,再

mvn install把打包好的配置环境安装进本项目,这段代码是会在仓库找junit的4.12版本,没找到就会去中央库下,然后加进本项目,然后这里提供一个用于查找所需要jar包参数的网站 然后也是点左下角,选择maven projects右边会弹出来一个工作框,点框左上角的刷新刷新一下就可以看到配置好的环境以及加入本项目了

然后我写了个测试类:

say.java:

package exm;
public class say {
    public String sayHello()
    {
        return "Hello";
    }
}

sayTest.java:

package test;

import org.junit.After;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
import exm.say;

/** 
* say Tester. 
* e
* @author <Authors name> 
* @since <pre>一月 6, 2018</pre> 
* @version 1.0 
*/ 
public class sayTest { 

@Before
public void before() throws Exception { 
} 

@After
public void after() throws Exception { 
} 

/** 
* 
* Method: sayHello() 
* 
*/ 
@Test
public void testSayHello() throws Exception { 
//TODO: Test goes here...
    Assert.assertEquals("Hello",new say().sayHello());
} 
}

然后这是他们应该放的位置,注意目录结构:

ider 如何 给java项目添加maven idea项目加入maven_idea_06

点run all Test就可以完成测试了。。