阅读246 返回首页    go 阿里云 go 技术社区[云栖]


《maven实战》读书笔记3——maven使用入门

说明

由于我目前所做的项目皆是java web项目,因此整个系统学习的过程也就以java web为基础。

maven项目结构

根据maven约定,一个比较标准的maven java web项目,结合eclipse通常可以看到结构如下:

src/main/java            java主要代码存放目录
src/main/resources       java配置文件存放目录
src/test/java            java测试代码存放目录
JRE System Library       jre中的一些jar包映射
Maven Dependencies       根据pom.xml配置的依赖而导入的jar包映射
src/main/webapp          web相关的文件,如html等
src/test                 这个目录暂时还没用过
target                   maven项目输出目录,例如生成多的war包
pom.xml                  maven项目最重要的一个文件

pom.xml文件说明

pom.xml文件格式

pom.xml文件是maven项目的灵魂所在,一个标准的pom.xml文件格式大概如下:

<?xml version="1.0" encoding="UTF-8"?\>
<project xmlns="https://maven.apache.org/POM/4.0.0" xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="https://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"\>
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.cmupay</groupId>
    <artifactId>cmupay-coresys</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>war</packaging>
    <name>cmupay-coresys</name>
    <description>Demo project for Spring Boot</description>
    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <java.version>1.8</java.version>
    </properties>
    <dependencies>
        <dependency>
            <groupId>commons-lang</groupId>
            <artifactId>commons-lang</artifactId>
            <version>2.6</version>
            <scope>test</scope>
        </dependency>
    </dependencies>
    <build>
        <plugins>
            <plugin>
                <artifactId>maven-compiler-plugin</artifactId>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>

pom.xml节点说明

这个文件中,首先是xml格式说明,接下来是pom.xml文件中的父节点<project>

project

project是pom.xml文件中的父节点(或者说根元素),节点中有一些属性配置,这些属性可以说不是必须的,但是一般都会写上,有了这些配置可以使一些工具更容易解析和编辑pom.xml文件,例如使用eclipse编辑。

modelVersion

<modelVersion>指定了pom文件模板的版本,根据我的理解,和<project>中的属性涉及到的版本应该一致。需要注意的是,对于maven2和maven3来说,只能是4.0.0。

groupId、artifactId及version

这三个元素可以说是pom.xml中最重要的元素,他们三个决定了当前maven项目的坐标唯一性,貌似可以理解成三维坐标的x、y、z三个坐标,然后决定了一个确定的点。
其中<groupId>指定当前项目所属的组,一般可能就填写公司的网址,由于网址的唯一性,这个就不会重复,相当于三维坐标中从x轴定位;
<artifactId>指定了当前项目在当前组中的唯一ID,通常都是填写的项目名,同一个公司可能有多个项目,但不同项目有不同的编号和名称,相当于在三维坐标确定的x坐标位置再确定y坐标;
实际开发过程中,经常是以迭代的形式进行,因此不同的项目就会有很多个不同的版本,单独用项目名也不能确定项目的唯一性,通过<version>指定项目版本,再结合前边两项,就能保证项目坐标的唯一性,这样在maven不同项目间的依赖上就能通过配置准确的获取配置的依赖项。

packaging

这里主要是指定项目打包时是生成什么形式的压缩包,例如通常web项目会填写“war”。

name和description

因为项目名称有时候可能并不能很好的表达该项目做什么,因此name元素可以用来声明一个更加友好的名称,同样的description是更加详细的项目描述。

properties

maven项目基础属性配置,通常会配置项目构建的字符集编码,输出,也就是打包文件的字符集以及jdk版本等。

dependencies

这里主要是项目依赖的配置,也就是通常所说的jar包配置,一个<dependencies>里边可以有很多个<dependency>元素,而<dependency>里边就是实际依赖包的配置,配置的原理实际上就是上边描述过的项目坐标,通过<groupId><artifactId><version>确定唯一的jar包。
当有了上述三个配置后,maven就会自动下载相应的jar包,至于具体是去哪里下载,就要涉及到一些其他的配置了,后续熟悉过程中再进一步说明。
<dependency>里边还有一个属性是<scope>,指的是作用范围,如果是“test”,说明只在测试的时候生效,如果没有配置这个值,默认是"compile",表示对主代码和测试代码都生效。

build

build里边通常是对maven构建项目过程中需要用到的maven插件进行配置,例如上述例子中指定编译插件版本。
在实际使用过程中,我发现当配置了<properties>中的jdk版本后,似乎不需要再在这里配置maven编译插件版本也可以,具体细节可能还需要在后续熟悉的过程中进一步了解。

最后更新:2017-11-07 18:03:56

  上一篇:go  搭建无线WiFi,最需要关心什么?
  下一篇:go  高可用架构-- MySQL主从复制的配置