内容简介:Maven的默认POM文件,如果POM文件没有指定父POM文件,那么配置都是集成Super POMMaven项目的完全限定名:
Maven
What is Maven?
- 构建规范项目的工具
- 项目管理工具,进行打包,测试,部署
- 具有一套规范
POM
What is POM
- Maven的基本工作单元
- xml文件
- 存储Maven项目的配置文件(Maven的命令都是先从POM读取命令,然后执行命令)
Super POM
Maven的默认POM文件,如果POM文件没有指定父POM文件,那么配置都是集成Super POM
Minimal POM
POM文件的最低需要的配置元素:
- project
- groupId:一般是组织名称
- artifactId:项目的名称
- version:项目的版本号
Maven项目的完全限定名:
groupId:artifactId:version
packaging元素默认是JAR,还有其他选项是WAR,EAR等等
Project Inheritance
之前在Super POM一节谈到指定了父POM的继承指定父POM的配置,实现如下:
. |--my-app | |-- my-module | | `-- pom.xml `-- pom.xml
my-app的POM <project> <modelVersion>4.0.0</modelVersion> <groupId>com.mycompany.app</groupId> <artifactId>my-app</artifactId> <version>1</version> </project>
my-module的POM <project> <modelVersion>4.0.0</modelVersion> <groupId>com.mycompany.app</groupId> <artifactId>my-module</artifactId> <version>1</version> </project>
修改my-module的POM,即可实现讲my-app作为一个父POM继承给my-module,实现如下:
my-module的POM <project> <parent> <groupId>com.mycompany.app</groupId> <artifactId>my-app</artifactId> <version>1</version> </parent> <modelVersion>4.0.0</modelVersion> <groupId>com.mycompany.app</groupId> <artifactId>my-module</artifactId> <version>1</version> </project>
如果my-app不是作为my-module的父目录,如下:
. |-- my-module | `-- pom.xml `-- my-app `-- pom.xml
需要配置<relativePath>属性,配置相对my-module的相对路径如下:
<project> <parent> <groupId>com.mycompany.app</groupId> <artifactId>my-app</artifactId> <version>1</version> <relativePath>../parent/pom.xml</relativePath> </parent> <modelVersion>4.0.0</modelVersion> <artifactId>my-module</artifactId> </project>
Project Aggregation
如果我们想要对一些模块都需要执行相同的命令,但是不想进入每一个模块下进行执行命令,可以使用Aggregation.
目录结构
. |-- my-module | `-- pom.xml `-- pom.xml
将my-module模块聚合到my-app,修改my-app的POM文件如下:
<project> <modelVersion>4.0.0</modelVersion> <groupId>com.mycompany.app</groupId> <artifactId>my-app</artifactId> <version>1</version> <packaging>pom</packaging> <modules> <module>my-module</module> </modules> </project>
- <packaging>属性设置未pom
- <module>属性是相对于my-app的相对路径
- 有些命令不能同时执行
- Inheritance和Aggregation可以混合使用
Project Interpolation and Variables
Maven的设计哲学就是不要重复自己,所以当一些配置是相同的时候,我们可以使用自己定义的变量和预定义好的变量.
比如我们要使用projcet的version给其他配置项,我们可以如此使用
<version>${project.version}</version>
我们也可以使用自己定义的变量,比如我们定义了一个mavenVersion变量,我们可以如此使用
<project> ... <properties> <mavenVersion>2.1</mavenVersion> </properties> <dependencies> <dependency> <groupId>org.apache.maven</groupId> <artifactId>maven-artifact</artifactId> <version>${mavenVersion}</version> </dependency> <dependency> <groupId>org.apache.maven</groupId> <artifactId>maven-project</artifactId> <version>${mavenVersion}</version> </dependency> </dependencies> ... </project>
Standard Directory Layout
我们在思考Maven是什么的时候,其中有一个理解就是Maven是一套规范,那么这些规范体现在哪里呢,体现在他的项目目录的结构
目录 | 解释 |
---|---|
src/main/java | Application/Library sources |
src/main/resources | Application/Library resources |
src/main/filters | Resource filter files |
src/main/webapp | Web application sources |
src/test/java | Test sources |
src/test/resources | Test resources |
src/test/filters | Test resource filter files |
src/it | Integration Tests (primarily for plugins) |
src/assembly | Assembly descriptors |
src/site | Site |
LICENSE.txt | Project's license |
NOTICE.txt Notices | and attributions required by libraries that the project depends on |
README.txt | Project's readme |
Compile
- 编译主代码(即是除去测试代码)
命令:
mvn compile
- 切换目录到需要执行编译的项目的pom.xml文件目录下
- 首先Maven先去下载编译需要的插件和依赖
- 将编译的文件放在 ${basedir}/target/classed
- 编译测试代码
命令:
mvn test-compile
- 该命令不会进行测试
Test
命令:
mvn test
- 如果没有执行mvn compile命令编译,则会先进行编译。
- 同时也需要下载测试需要的插件
install
我们执行编译的或者测试的时候会将需要依赖下载到本地仓库(一般在${user.home}/.m2/repository)中,供我们的项目使用。那么我们是不是也可以讲自己的项目给其他项目使用呢?
- 先打包
- 后安装
Packaging
命令:
mvn packaging
该命令会将打包好的文件(如果我们在POM文件设置packaging是jar,那就打成jar包,以此类推)放在目录${basedir}/target
Install
命令:
mvn install
surefire插件会查找项目中特定命名约定的文件
- **/*Test.java
- **/Test*.java
- **/*TestCase.java
默认排除:
- **/Abstract*Test.java
- **/Abstract*TestCase.java
Clean
命令:
mvn clean
只将${basedir}/target里面的文件清除
External Dependencies
命令:
<dependencies> ... <dependency> <groupId>com.mycompany.app</groupId> <artifactId>my-app</artifactId> <version>1.0-SNAPSHOT</version> <scope>compile</scope> </dependency> </dependencies>
- groupId,artifactId,version就是我们一开始所说的项目的定位必备三项。
- scope代表在何时使用一般有个compile(编译),test(测试),runtime(运行)
- 那么我们引用的这些第三方的库从哪里下载呢?从我们repository属性配置
<repositories> <repository> <id>central</id> <name>Central Repository</name> <url>https://repo.maven.apache.org/maven2</url> <layout>default</layout> <snapshots> <enabled>false</enabled> </snapshots> </repository> </repositories>
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:- TiDB入门(四):从入门到“跑路”
- MyBatis从入门到精通(一):MyBatis入门
- MyBatis从入门到精通(一):MyBatis入门
- Docker入门(一)用hello world入门docker
- 赵童鞋带你入门PHP(六) ThinkPHP框架入门
- 初学者入门 Golang 的学习型项目,go入门项目
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
C语言接口与实现
(美)David R. Hanson / 人民邮电出版社 / 2010-8 / 79.00元
可重用的软件模块是构建大规模可靠应用程序的基石,创建可重用的软件模块是每个程序员和项目经理必须掌握的技能。C语言对创建可重用的API提供的语言和功能支持非常少,虽然C程序员写应用时都会用到API和库,但却很少有人去创建和发布新的能广泛应用的API。本书介绍用一种基于接口的设计方法创建可重用的API,这一方法将接口与实现分离开来,且与语言无关。书中详细描述了24个接口及其实现,便于读者深入了解此方法......一起来看看 《C语言接口与实现》 这本书的介绍吧!
HTML 编码/解码
HTML 编码/解码
html转js在线工具
html转js在线工具