POM添加规范

把  Maven 的系统文件下载并保存。 例如我的: D:\NBProject\apache-maven-2.2.1

 

设置环境和变量 。我配置了一个 bat 文件。 执行后, 相关的环境变量就配置好了。

 

 

C代码  收藏代码
  1. ECHO OFF  
  2.   
  3. SET JAVA_HOME=D:\Program Files\Java\jdk1.6.0  
  4.   
  5. SET M2_HOME=D:\NBProject\apache-maven-2.2.1  
  6.   
  7. SET PATH=%PATH%;%M2_HOME%\bin  
  8.   
  9. ECHO 准备执行测试Maven的版本信息.....  
  10.   
  11. PAUSE  
  12.   
  13. mvn -v  

 

 

 然后新建一个文件夹, 建立 pom.xml 文件 。 规范 :

 

 groupId 定义了你的公司和组织的信息 。 比如,你的公司是 mycom , 项目是  myapp 那么,最好就定义

 

<groupId>com.mycom.myapp</groupId>

 

artifactId  就定义为项目的名称, 在我们项目中,如果和项目名称不一致,就导致Maven不能编译,

 

<artifactId>travel-hotel-admin</artifactId>

 

 版本定义:

 

<version>2.0.0-SNAPSHOT</version>

 

 SNAPSHOT 表示是快照版本, 尚在开发中的不稳定版本 。 Maven 遇到这种标记的版本号时, 每次都会去中央库取最原始的 Jar 包 。

 

<packaging>war</packaging>

 

打包类型   jsr war pom  它们的打包执行的命令不一样.

 

 

我们源代码最好也就按照 groupId 定义的名称,包名就定义为   com.mycom.myapp.xxxxxxx.xxxxxxxx

 

Eclipse中的项目还是包依赖:

比如: 项目中,包含这个依赖:


        <dependency>
            <groupId>com.woyo.travel</groupId>
            <artifactId>travel-common-server-api</artifactId>
            <version>2.0.0-SNAPSHOT</version>
        </dependency>

 

而且, Eclpse 也打开了这个工程,  那么Eclipse就会依赖这个工程.  如果这个工程被关闭了, 那么,就会去本地仓库中查找所依赖的Jar包。此时, 就是Jar包依赖了。 有时候,

 

 

POM 工程的继承:

 

通过在父工程中定义好 版本号, groupId ,version 等参数, 继承的工程不用定义这些参数,就会自动继承。

 

travel/pom.xml

 

Xml代码  收藏代码
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
  3.     xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">  
  4.     <modelVersion>4.0.0</modelVersion>  
  5.     <groupId>com.xxxxxxxxx.travel</groupId>  
  6.     <artifactId>travel-hotel</artifactId>  
  7.     <packaging>pom</packaging>  
  8.     <name>travel hotel Parent pom.xml</name>  
  9.     <version>2.0.0-SNAPSHOT</version>  
  10.     <organization>  
  11.         <name>travel</name>  
  12.         <url>http://hotel.travel.woyo.com</url>  
  13.     </organization>  
  14.       
  15.     <modules>  
  16.         <module>travel-hotel-admin</module>  
  17.         <module>travel-hotel-cc</module>  
  18.     </modules>  
  19.       
  20.     <build>  
  21.         <plugins>  
  22.             <plugin>  
  23.                 <groupId>org.apache.maven.plugins</groupId>  
  24.                 <artifactId>maven-compiler-plugin</artifactId>  
  25.                 <configuration>  
  26.                     <source>1.6</source>  
  27.                     <target>1.6</target>  
  28.                     <encoding>UTF-8</encoding>  
  29.                 </configuration>  
  30.             </plugin>  
  31.             <plugin>  
  32.                 <groupId>org.apache.maven.plugins</groupId>  
  33.                 <artifactId>maven-resources-plugin</artifactId>  
  34.                 <configuration>  
  35.                     <encoding>UTF-8</encoding>  
  36.                 </configuration>  
  37.             </plugin>  
  38.         </plugins>  
  39.     <resources>  
  40.       <resource>  
  41.         <directory>src/main/resources</directory>  
  42.         <filtering>true</filtering>  
  43.       </resource>  
  44.     </resources>  
  45.     <filters>  
  46.       <filter>${user.home}/travel_hotel.properties</filter>  
  47.     </filters>  
  48.     </build>  
  49.   
  50.     <properties>  
  51.         <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>  
  52.         <!-- 主要依赖库的版本定义 -->  
  53.         <spring.version>2.5.6</spring.version>  
  54.         <spring.security.version>2.0.5.RELEASE</spring.security.version>  
  55.         <struts2.version>2.2.1</struts2.version>  
  56.         <ibatis.version>2.3.4.726</ibatis.version>  
  57.         <mysql-driver.version>5.1.12</mysql-driver.version>  
  58.         <slf4j.version>1.6.1</slf4j.version>  
  59.   
  60.         <!-- Plugin的属性定义 -->  
  61.         <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>  
  62.         <urlrewritefilter.version>3.1.0</urlrewritefilter.version>  
  63.     </properties>  
  64.  <dependencyManagement>  
  65.     <dependencies>  
  66.         <dependency>  
  67.             <groupId>junit</groupId>  
  68.             <artifactId>junit</artifactId>  
  69.             <version>4.4</version>  
  70.             <scope>test</scope>  
  71.         </dependency>  
  72.                 ..............................................  
  73.     </dependencies>  
  74.  </dependencyManagement>  
  75. </project>  

 

 

子工程定义在

 

travel/travel-hotel/pom.xml

 

这样的目录结构, 子工程的 pom 文件会自动在../pom 得到父工程的pom文件定义,否则需要定义

 

<relativePath>../travel/pom.xml</ relativePath>

 

才能找到

Xml代码  收藏代码
  1. <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
  2.     xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">  
  3.     <modelVersion>4.0.0</modelVersion>  
  4.     <parent>  
  5.         <artifactId>travel-hotel</artifactId>  
  6.         <groupId>com.woyo.travel</groupId>  
  7.         <version>2.0.0-SNAPSHOT</version>  
  8.     </parent>  
  9.     <groupId>com.woyo.travel</groupId>  
  10.     <artifactId>travel-hotel-admin</artifactId>  
  11.     <version>2.0.0-SNAPSHOT</version>  
  12.     <packaging>war</packaging>  
  13.     <name>travel-hotel-admin</name>  
  14.     <dependencies>  
  15.         <dependency>  
  16.             <groupId>com.woyo.travel</groupId>  
  17.             <artifactId>travel-common-server-api</artifactId>  
  18.             <version>2.0.0-SNAPSHOT</version>  
  19.         </dependency>  
  20.     </dependencies>  
  21.   
  22. </project>  

 

 运行了  Maven install 命令后 , 会在本地 repository 仓库生成 对应的文件.

 

如果是打包成 war 包, 会自动把相应的 资源文件 , 依赖的 jar 包(包括传递依赖的)全部 Copy 到web-inf 目录,

 

 

衍生问题:

Maven 中 Jar 包传递依赖的问题:

 

Maven 2 的一个很明显的优势就是jar 包传递依赖的解决。

 

如果你使用的是m2eclipse 插件,那么最简单的找到传递依赖冲突的插件的方法,就是在Eclipse 中,打开pom.xml时,使用open with Maven Pom Editor,查看Dependency Hierachy,输入想查找的jar包名,可以看到它的父级依赖关系,即它是谁的传递依赖,有几个jar包依赖到这个jar包,分别使用的是什么版本都可以看到。

posted @ 2020-03-18 22:39  HkGov  阅读(615)  评论(0编辑  收藏  举报