一、maven的概念
一健构建
抽象构建过程
Maven 的主要作用: 项目构建 , 管理依赖
提供了本地仓库、中央仓库
二、父工程控制版本,子工程
创建一个maven project(pom),然后在创建三个子模块(maven moudule),其中三个子模块,分别为 dao、service、web,也就是将三层的内容分别独立为一个项目,进一步将耦合性降低。
为了消除重复,如果将dao、service、web分开创建独立的工程则每个工程的pom.xml文件中的内容存在重复,比如:设置编译版本、锁定spring的版本的等,可以将这些重复的配置提取出来在父工程的pom.xml中定义。
web层如何调用service层代码?service层又如何调用dao层的代码呢?
web层调用service层的代码其实很简单,因为service是一个完整的项目,那么我们在web层这个项目中想要使用别得项目中的代码,只需要通过maven的pom.xml文件编写对应的坐标,将其jar包加入进来即可达到目的。也就是说把一个模块的 jar 包 引到另一个模块里面去。
三、项目构建(生命周期),自动化的哦
1、清理
2、编译
3、跑单元测试
4、测试报告
5、打包
6、打包到仓库中
7、部署
........
感觉步骤挺多的,但是其实只是 clean install 一下就好了。
四、一般常由 properties 来决定版本号
<properties> <!-- 制定文件编码 --> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> <maven.compiler.encoding>UTF-8</maven.compiler.encoding> <!-- 相关软件版本号 --> <commons-lang.version>2.6</commons-lang.version> <spring.version>4.3.4.RELEASE</spring.version> <csii.pe.version>10.0.1</csii.pe.version> <dubbo.version>2.8.4a</dubbo.version> <servlet.version>3.1.0</servlet.version> <solrj.version>6.3.0</solrj.version> <zookeeper.version>3.4.8</zookeeper.version> <jackson.version>2.8.5</jackson.version> <kryo.version>3.0.3</kryo.version> <slf4j.version>1.7.21</slf4j.version> <logback.version>1.1.7</logback.version> <tomcat-jdbc.version>8.5.4</tomcat-jdbc.version> <spring-ibatis.version>2.0.8</spring-ibatis.version> <ibatis-sqlmap.version>2.3.4.726</ibatis-sqlmap.version> <elasticsearch.version>2.3.4</elasticsearch.version> <fastjson.version>1.2.27</fastjson.version> <flowctrl.version>1.1.1</flowctrl.version> <disconf.version>2.6.36</disconf.version> <http.core.version>4.4.6</http.core.version> <mybatis.spring.version>1.3.1</mybatis.spring.version> <mybatis.version>3.4.5</mybatis.version> <mybatis-paginator.version>1.2.17</mybatis-paginator.version> <druid.version>1.1.6</druid.version> <mysql.version>5.1.40</mysql.version> <mybatis.generator.version>1.3.5</mybatis.generator.version> <lombok.version>1.16.2</lombok.version> <activiti.version>5.22.0</activiti.version> <hibernate.version>4.2.5.Final</hibernate.version> <guava.version>17.0</guava.version> </properties>
<version>4.12</version> <version>1.16.10</version>
五、其他模块的引用
<modules> <module>csii-loan-application-parent</module> <module>csii-loan-common-parent</module> <module>csii-loan-db-core</module> </modules>
引用其他的模块,就联系到一起了。
六、GroupId和ArtifactId 坐标定位
GroupId一般分为多个段,这里我只说两段,第一段为域,第二段为公司名称
ArtifactId设置为testProj,表示你这个项目的名称是testProj
<groupId>com.csii.pe</groupId> <artifactId>pe-core</artifactId>
七、scope 作用域
<dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> <scope>test</scope> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>1.16.10</version> <scope>provided</scope> </dependency>
compile (编译范围)
compile是默认的范围;编译范围依赖在所有的classpath 中可用,同时它们也会被打包。
provided (已提供范围)
provided 依赖只有在当JDK 或者一个容器已提供该依赖之后才使用。已提供范围的依赖在编译classpath (不是运行时)可用。它们不是传递性的,也不会被打包。
runtime (运行时范围)
runtime 依赖在运行和测试系统的时候需要,但在编译的时候不需要。也不会被打包。
test (测试范围)
test范围依赖 在一般的编译和运行时都不需要,它们只有在测试编译和测试运行阶段可用。也不会被打包。