maven 03-pom.xml核心配置
阿新 • • 發佈:2018-11-02
程序開發 ack 自動 release mage 行程 lib 進行 ram
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>
maven 03-pom.xml核心配置