maven
maven用过很多次,但是没有详细的总结过
安装。配置略过
1.使用命令行创建maven项目
1.1 准备一个文件夹
mkdir test
1.2 执行创建项目命令
mvn archetype:generate
然后过一会儿会提示创建一个什么类型的项目,可以选择的类型有两千多个,默认的那个是quickstart。

再然后会提示一个版本:

然后输入groupId:

然后还要输入artifactId,version,package这些,(version和package都有默认值,artifactId必须输入值),然后确认一下

最后构建成功:

目录结构:

1.3 可以转换成idea项目
命令:mvn idea:idea
pa:mvn eclipse:eclipse(转eclipse)
执行成功的话,就可以用idea打开了
用idea运行里面自带的helloWorld:

1.4 打包
mvn package

2 将非maven项目转换为maven项目

如果项目本身有导入的jar包依赖,比如在lib文件夹里面,需要在pom里面指出来,不然maven会不能打包的
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.7.0</version>
<configuration>
<compilerArguments>
<!-- 对应jar放置在项目中的位置-->
<extdirs>lib</extdirs>
</compilerArguments>
</configuration>
</plugin>
3目录结构

解释一下文件夹的颜色代表什么:

4 Scope依赖范围
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
看这里
<scope>test</scope>
</dependency>
- compile : 编译,测试,运行都有效,默认的选择
- test : 测试有效,例如junit
- provided : 编译,测试有效,例如 servlet ,运行时容器会提供实现
- runtime : 运行和测试有效,例如 jdbc,编译时只需相应的接口,测试和运行时才需要具体的实现
- system : 编译,测试有效。使用此范围的依赖必须通过systemPath元素显式的指定依赖文件,因而此类依赖是不通过Maven仓库解析的,一般适合于本机测试环境下,依赖本地起的服务。

5 多模块
5.1 多模块之间的依赖:

ps:如果是web模块依赖其他模块还需要把依赖也部署出去:

5.2 多模块之间的依赖(jar包)
某个模块被maven打成jar,还可以直接引用jar包
<dependency>
<groupId>com.test</groupId>
<artifactId>DAO</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
6 maven命令
前面已经说过几个命令:
mvn archetype:generate
mvn idea:idea(mvn eclipse:eclipse)
mvn package
6.1 主要命令
-
mvn compile:
代码编译成字节码class(不包含test代码的内容)-
mvn test-compile
:代码编译成字节码class(包含test的代码)
-
-
mvn test:
运行test里面的测试代码并生成测试报告 -
mvn clean:
将target目录删除 -
mvn package:
打包,动态 web工程打 war包,Java工程打 jar 包-
mvn jar:jar
:只打jar包 -
mvn war:war
:只打war包
-
-
mvn install:
将jar包放到本地.m的仓库目录里面,以后别的项目可以直接调用这个jar包了 -
mvn install|package|compile -Dmaven.test.skip=true
:跳过测试 -
mvn clean install
:mvn clean+mvn install
6.2 其他命令
mvn site
:生成项目相关信息的网站
mvn eclipse:clean
: 清除eclipse的一些系统设置
mvn jetty:run
:运行项目于jetty上(一个类似tomcat的东西,需要maven的pom中添加jetty插件)
mvn -Dwtpversion=1.0 eclipse:eclipse
:生成Wtp插件的Web项目(不知道是什么鬼东西)
mvn -Dwtpversion=1.0 eclipse:clean
:清除Eclipse项目的配置信息(Web项目)
mvn -e
:显示详细错误 信息
mvn validate
:验证工程是否正确,所有需要的资源是否可用
mvn dependency:resolve
: 打印出已解决依赖的列表
mvn dependency:tree
: 打印整个依赖树
7 多模块的依赖继承
7.1依赖继承
父模块的依赖,子模块可以继承,前提是子模块要申明父模块
<!--声明自己的父模块,将继承父模块的所有依赖-->
<parent>
<artifactId>Maven03</artifactId>
<groupId>com.zhangguo.maven03</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
7.2依赖管理
父模块申明需要的依赖但是不引入,各个子项目根据需求再引入,好处是可以做到依赖版本的统一管理
父模块:
<!--dependencyManagement里只是声明依赖,并不实现引入,
因此子项目需要显式的声明需要用的依赖。
如果不在子项目中声明依赖,是不会从父项目中继承来的;
只有在子项目中写了该依赖项,并且没有指定具体版本,才会从父项目中继承该项,
并且version和scope都读取自父pom;
另外如果子项目中指定了版本号,那么会使用子项目中指定的jar版本。-->
<!--版本管理-->
<properties>
<junit.version>4.12</junit.version>
</properties>
<dependencyManagement>
<dependencies>
<!-- junit -->
<!-- https://mvnrepository.com/artifact/junit/junit -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>${junit.version}</version>
<scope>test</scope>
</dependency>
</dependencies>
</dependencyManagement>
子模块:
<parent>
<artifactId>Maven03</artifactId>
<groupId>com.zhangguo.maven03</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<dependencies>
<!--按需依赖,版本被父模块控制,可以自行声明,优先级更高-->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
</dependency>
</dependencies>