Maven的简介
简介
Maven(专家;内行),Apache组织中的一个比较成功的开源项目,主要服务于java平台的项目构建,依赖管理和项目信息管理。
无论是小型开发的开源类库项目,或是大型的企业级应用;无论是传统的瀑布式开发(先分析需求,再开发),还是流行的敏捷开发(先开发一个雏形,再根据需求改改)。
项目构建:生成文档打包项目
项目构建的工具
Ant构建
Ant(蚂蚁)最早的构建工具,基于IDEA。之前是最流行的java构建工具,不过对xml脚本编写的格式让xml文件特别大。对工程构建过程中控制特别好。
Maven构建
项目对象模型,通过其描述信息来管理项目的构建,报告和文档的软件项目管理工具。它填补了Ant的缺点。Maven首先支持了从网上下载的功能,仍然采用xml作为配置文件的格式。Maven专注的是依赖管理,使用java编写的。
Gradle构建
结合了上面俩个工具的优点,继承了Ant的灵活性和Maven的生命周期,它最后被google作为了Andriod御用的管理工具。它最大的区别是不用xml作为配置文件格式,采用了DSL格式,使得脚本更加简洁。
Maven的四大特性
1.依赖管理系统
在java中,可以用groupId、artifactId、version组成的Coordination(坐标)唯一标识一个依赖。
例子:(依赖可以在maven仓库中搜索)
<!-- 任何基于Maven构建的项目自身也必须定义这项属性,
生成的包可以是jar包,也可以是war包或者jar包。-->
<dependency>
<groulId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
</dependency>
2.多模块构建
项目复查时,一般会将 Dao Service Controller层分离。将一个项目分解为多个模块已经是很普遍的一种方式。
在Maven中需要定义一个parent POM作为一组module的聚合POM。在该POM中可以使用标签来定义一组模块。parent POM不会有什么实际构建产出。而parent POM中的build配置以及依赖都会自动继承给module。
3.项目结构的一致
Ant时代创建java项目目录比较随意,通过Ant配置指定哪些属于source,哪些属于textSource等。而Maven在设计之初的理念就是 Conversion over configuration。其指定了一套项目目录结构作为标准的java项目结构,解决不同idea带来的文件目录不一致。
4.一致的构建模型和插件机制
引入Jetty服务器
<plugin>
<groupId>org.mortbay.jetty</groupId>
<artifactId>maven-jetty-plugin</artifactId>
<version>6.1.25</version>
<configuration>
<scanIntervalSeconds>10<scanIntervalSeconds>
<contextPath>/text</contextPath>
</configuration>
</plugin>
安装配置及目录结构
Maven安装配置
Jdk版本1.7及以上版本
环境变量的配置:
安装解压后把Maven的根项目配置到系统的变量环境MAVEN_HOME,将bin目录配置到path变量中。
注意:maven解压存放的目录不要包含中文和空格。
检查Maven配置是否成功
打开Dos窗口,执行mvn -v
Maven项目的目录结构
dos窗口执行Maven项目
编译java文件成功!
编译成功目录下生成对应的target文件夹
执行main方法
mvn exec:java -Dexec.mainClass="com.hm.demo.HelloWorld"
Maven常用命令
命令参数
1.-D 传入属性参数
例如:mvn package -Dmaven.test.skip=true;
以 -D开头,将maven.test.skip的值设为true,就是告诉maven打包的时候跳过单元测试。
同理,mvn deploy-Dmaven.test.skip=true代表部署项目并跳过单元测试。
2.-P 使用指定的Profile配置
例如项目开发需要有多个环境,一般是开发、测试、预发、正式这四个环境,在pom.xml中配置如下:
<profiles>
<profile>
<id>dev</id>
<properties>
<env>dev</env>
</properties>
<activation>
<!--不配置的情况下,默认为dev环境-->
<activeByDefault>true</activeByDefault>
</activation>
</profile>
<profile>
<id>qa</id>
<properties>
<env>qa</env>
</properties>
</profile>
<profile>
<id>pre</id>
<properties>
<env>pre</env>
</properties>
</profile>
<profile>
<id>prod</id>
<properties>
<env>prod</env>
</properties>
</profile>
</profiles>
.......
<build>
<filters>
<filter>config/${env}.properties/</filter>
</filters>
<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
</resource>
</resources>
......
</build>
profiles定义了各个环境的变量Id,filters中定义了变量配置文件的地址,
其中地址中的环境变量就是上面的profile中定义的地址,resources中定义哪些目录下的文件会被配置文件中定义的变量替换。
通过maven可以实现按不同环境进行打包部署。
例如:mvn package -Pdev -Dmaven.test.skip=true
表示打包本地环境,并跳过单元测试。
Idea编辑器集成Maven环境
1.配置本地仓库地址
文件位置:maven—》conf—》settings.xml
2.配置阿里镜像
3.idea中集成Maven环境
Idea创建Maven项目
1.创建java项目
填写 GroupId , ArtifactId 之后,一路 Next 直到 Finish。
2.创建web项目
填写 GroupId , ArtifactId 之后,一路 Next 直到 Finish。
3.创建maven项目之后补全目录
右键项目,找到Mark Directory as。
也可以在File->Project Structure中更改
这里是最终java项目最终目录。
web项目同理,但多一些步骤:添加tomcat/jetty服务器,以及启动方式
tomcat/jetty 依赖坐标都可以在其自己的官网找到(或者maven仓库)~
启动上也与java项目不同。
补充:并且创建maven项目需点击自动导包。
Idea中编译打包Maven项目
Maven环境下构建多模块项目
1.创建maven_parent
2.创建maven_dao模块
在父项目maven_parent基础上,新建项目。
选择java项目的模板
3.创建mave_service模块
与创建maven_dao方法步骤一致。
4.创建mave_controller模块
创建maven_controller模块步骤基本与前俩个一致,只需要将第一步选择Maven模板设置为Web项目即可。
(模板类型:maven-archetype-webapp)
最终完成后。
5.修改模块配置
1.修改jdk版本,与自己的对应。
2.单元测试版本可修改。
3.删除多余的配置。
修改后的配置:(dao\service\controller 都要更改)
6.设置模块之间的依赖关系
理清模块之间的关系:(在这里)
maven_controller 依赖 maven_service 依赖 maven_dao
maven_controller层,为Servlet层。需要引入Servlet依赖,并且引入Tomcat依赖启动项目。
7.操作步骤
1.maven_dao模块,编写UserDao类。
2.maven_service模块,编写UserService类,调用UserDao,并在该模块的pom.xml文件中映入maven_dao依赖。
(依赖在maven_dao的pom.xml文件中)
3.maven_controller模块,在该模块中搞定pom.xml文件中引入,maven_service依赖、Servlet依赖、tomcat服务器插件。
(maven_service模块的pom.xml文件中、mvn仓库找Servlet依赖、tomcat官网找插件)
编写UserServlet类,继承HttpServlet,调用UserService。
4.添加相关命令启动tomcat、在启动前先将各模块(install)打包一下模块,(install)目的是将模块打包供其他模块使用。子模块、父模块都install。
图解步骤:
Maven的打包操作
添加Profile配置
在项目的pom.xml文件中,配置Profile:
<!-- 添加Profile配置-->
<profiles>
<profile>
<id>dev</id>
<properties>
<env>dev</env>
</properties>
<activation>
<!--不配置的情况下,默认打包dev环境-->
<activeByDefault>true</activeByDefault>
</activation>
</profile>
<profile>
<id>pro</id>
<properties>
<env>pro</env>
</properties>
</profile>
<profile>
<id>test</id>
<properties>
<env>test</env>
</properties>
</profile>
</profiles>
设置资源文件配置
在项目的pom.xml文件中,配置资源文件配置:
(注意放在<build></build>标签内)
<!-- 设置对应的资源路径-->
<resources>
<resource>
<directory>src/main/resources/${env}</directory>
</resource>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.xml</include>
<include>**/*.properties</include>
<include>**/*.tld</include>
</includes>
<filtering>false</filtering>
</resource>
</resources>
执行打包操作