maven 03-pom.xml核心配置

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>
原文地址:https://www.cnblogs.com/liangjingfu/p/9897384.html