• 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>
    
  • 相关阅读:
    linux办公软件的使用和病毒防范
    需要了解的基本礼仪素养
    遗留问题
    shell基本命令
    shell编程
    遇到过得问题
    mac电脑操作
    Linux编程
    BZOJ 1601 [Usaco2008 Oct]灌水 (建图+mst)
    BZOJ 2653 middle (可持久化线段树+中位数+线段树维护最大子序和)
  • 原文地址:https://www.cnblogs.com/liangjingfu/p/9897384.html
Copyright © 2020-2023  润新知