maven的pom.xml配置文件并不单单只是一个配置依赖程序包的关系,他可以配置更多的属性,包括插件项。
定义环境属性
- 在pom.xml文件里面定义一些基本的变量信息
- 可以将项目名称、版本编号、一些其他的相关属性都作为变量进行整体的声明
- 在整个配置就可以利用这些变量的引用实现内容的变更
<!-- 定义环境属性 --> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <jdk.version>1.8</jdk.version> <junit.version>4.12</junit.version> <spring.version>5.1.1.RELEASE</spring.version> <servlet.version>4.0.1</servlet.version> </properties> <!-- 引用变量 --> <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>${junit.version}</version> </dependency> </dependencies>
插件配置
- 所有在MyEclipse之中进行的Maven配置都没有实际意义,只是针对于当前的工作区和当前使用的项目有效
- 为了真正的让整个的项目长期有效,可以在pom.xml文件中设置一些相关插件
1、修改pom.xml文件进行JDK编译插件配置
<properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <jdk.version>1.8</jdk.version> <!-- 定义一个描述jdk版本的公共属性 --> </properties> <build> <finalName>m2work</finalName> <plugins> <!-- 定义要使用的插件,在整个Maven里面有很多插件 --> <plugin> <groupId>org.apache.maven.plugins</groupId> <!-- 定义插件的组信息 --> <artifactId>maven-compiler-plugin</artifactId> <!-- 要使用的是编译插件 --> <configuration> <source>${jdk.version}</source> <target>${jdk.version}</target> <encode>${project.build.sourceEncoding}</encode> </configuration> </plugin> </plugins> </build>
2、整体项目更新:ALT + F5
- MyEclipse虽然已经为项目配置好了插件,但这个时候该插件没有实际的效果
- 如果要想让配置起作用,还需要进行整体的项目更新
3、可以直接通过package进行程序的打包处理
4、输出源代码jar包
- 修改pom.xml配置文件,然后直接通过package进行程序的打包处理
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-source-plugin</artifactId> <configuration> <encode>${project.build.sourceEncoding}</encode> </configuration> <executions> <execution> <id>sources</id> <goals> <goal>jar</goal> </goals> </execution> </executions> </plugin>
5、生成相关程序文档,前提是代码有详细注释
- 修改pom.xml配置文件,然后直接通过package进行程序的打包处理
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-javadoc-plugin</artifactId> <configuration> <encode>${project.build.sourceEncoding}</encode> </configuration> <executions> <execution> <id>javadocs</id> <goals> <goal>jar</goal> </goals> </execution> </executions> </plugin>
包的作用域
- WEB项目开发会将所有的开发程序打包为一个*.war文件
- 那么在这个war文件里面就会存在所有的第三方程序开发包
- 对于一些重要的开发包保存在lib目录下
- 如果不需要的开发包就不希望其输出到lib之中
- 例如:junit只做测试使用,而实际项目发布的时候不希望输出到war文件之中
<dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>${junit.version}</version> <scope>test</scope> </dependency> <dependency> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> <version>${servlet.version}</version> <scope>provided</scope> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-core</artifactId> <version>${spring.version}</version> </dependency> </dependencies>
- scope就属于开发包的作用域
- junit只是一个测试环境,所以使用一个test的作用域
- spring-core并没有任何配置,默认为compile
- servlet程序包本身都会由Tomcat容器提供,所以这个包只在编译项目的时候有效,本质上没有没有保存在lib目录下
- compile
- 依赖项的默认作用范围
- 依赖项在运行、测试、编译
- runtime
- 依赖项只有在运行时才需要
- test
- 依赖项只有在测试时才需要
- provided
- 依赖项只有在编译和测试时才需要,运行时由jdk或者运行容器提供
- system
- 依赖项为自己提供,不需要Maven仓库下载
依赖包的排除
- 在进行包的依赖控制的时候,会发现存在有其他的依赖关系,里面存在有重复的依赖关系
- 这时候整个项目之中只会存在有一个公共的commons-logging开发包
<dependency> <groupId>org.springframework</groupId> <artifactId>spring-core</artifactId> <version>${spring.version}</version> <exclusions> <exclusion> <groupId>commons-logging</groupId> <artifactId>commons-logging</artifactId> </exclusion> </exclusions> </dependency>
继承关系
- 在一个项目中,几乎每个pom.xml文件都需要进行相关的基本配置,如属性、相关插件
- 此时所有的核心配置选项都定义在父项目之中,而后每一个子项目需要引用这个父项目中的相关定义
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>cn.liang</groupId> <artifactId>base</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>pom</packaging> <!-- 定义一个父的pom.xml文件 --> <name>base</name> <url>http://maven.apache.org</url> <!-- 在以后的开发中,所有的版本控制都交给base完成 --> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <jdk.version>1.8</jdk.version> <!-- 定义一个描述jdk版本的公共属性 --> <junit.version>4.12</junit.version> <spring.version>5.1.1.RELEASE</spring.version> <servlet.version>4.0.1</servlet.version> </properties> <build> <finalName>base</finalName> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <configuration> <source>${jdk.version}</source> <target>${jdk.version}</target> <encode>${project.build.sourceEncoding}</encode> </configuration> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-source-plugin</artifactId> <configuration> <encode>${project.build.sourceEncoding}</encode> </configuration> <executions> <execution> <id>sources</id> <goals> <goal>jar</goal> </goals> </execution> </executions> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-javadoc-plugin</artifactId> <configuration> <encode>${project.build.sourceEncoding}</encode> </configuration> <executions> <execution> <id>javadocs</id> <goals> <goal>jar</goal> </goals> </execution> </executions> </plugin> </plugins> </build> </project>
- 子项目的pom.xml配置文件
- 相关的属性以及配置的插件都会自动的通过父项目继承而来
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>cn.liang</groupId> <artifactId>base</artifactId> <version>0.0.1-SNAPSHOT</version> <relativePath>../base/pom.xml</relativePath> </parent> <artifactId>m2work</artifactId> <packaging>jar</packaging> <version>0.0.1</version> <name>m2work</name> <url>http://maven.apache.org</url> <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>${junit.version}</version> </dependency> <dependency> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> <version>${servlet.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-core</artifactId> <version>${spring.version}</version> </dependency> </dependencies> <build> <finalName>m2work</finalName> </build> </project>
- 在父类的pom.xml文件里面直接导入好所需要的开发包
<dependencyManagement> <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>${junit.version}</version> </dependency> </dependencies> </dependencyManagement>
- 但对于子项目而言,实际上也需要继续导入开发包,只不过不需要管理版本编号问题了
<dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> </dependency> </dependencies>