maven pom编写

    xiaoxiao2025-09-05  26

    1.<parent>

    Maven提供了继承的机制来管理这些共同的依赖。你可以编写一个pom.xml文件作为父级pom配置,各个模块在自己的pom.xml中继承父级pom文件,就像上面的示例那样,使用<parent>元素标识继承的父级pom文件。

    1.1父模块pom文件的编写:

    1、父级pom文件的packaging必须是pom,它需要作为pom文件发布以便子pom继承。 2、在父级pom可以使用 <dependencyManagement>配置依赖管理。在<dependencyManagement>下的依赖声明不会引入实际依赖,但是可以让子模块继承依赖配置。 3、在父级pom中可以使用<pluginManagement>配置插件管理。作用和<dependencyManagement>类似,只不过一个管理依赖一个管理插件。  

    1.2子模块pom文件的编写:

    1、需要使用<parent>元素标识继承的父pom。可以使用<relativePath>标识父级pom的物理路径,子模块会直接从指定的路径加载父级pom文件,未指定该元素时,子模块将根据父级pom的坐标从Maven仓库查找。

    2、子模块pom可以继承父级pom中除artifactId之外的大部分配置,因此子模块的groupId、version以及依赖的version都可以省略。

    3、子模块pom中的<dependency>可以只写groupId与artifactId,不再写版本号。

    例:

    <!-- 父级pom--> <dependencyManagement> <dependencies> <dependency> <groupId>org.glassfish.jersey.containers</groupId> <artifactId>jersey-container-servlet</artifactId> <version>2.5</version> </dependency> <dependency> <groupId>org.glassfish.jersey.media</groupId> <artifactId>jersey-media-json-jackson</artifactId> <version>2.5</version> </dependency> </dependencies> </dependencyManagement> <modules> <module>../GraduationProjectCollect</module> <module>../GraduationProjectTrain</module> <module>../GraduationProjectUse</module> </modules>

    (分割行)

    <!--子级pom,不需要写<groupId>,<version>与<dependency>中的<version>--> <parent> <groupId>com.likeyichu</groupId> <artifactId>GraduationProjectAll</artifactId> <version>1.0</version> </parent> <artifactId>GraduationProjectCollect</artifactId> <packaging>war</packaging> <name>GraduationProjectCollect</name> <description>GraduationProjectCollect-数据收集部分</description> <dependencies> <dependency> <groupId>org.glassfish.jersey.containers</groupId> <artifactId>jersey-container-servlet</artifactId> </dependency> <dependency> <groupId>org.glassfish.jersey.media</groupId> <artifactId>jersey-media-json-jackson</artifactId> </dependency> <dependencies>

    2.<dependency>

    指定依赖

    <!-- pom.xml的一部分 可以设置property,然后在后面引用。--> <properties> <spring.version>4.0.4</spring.version> </properties> <dependencies> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-core</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>${spring.version}</version> </dependency> </dependencies>

    3.<module>

    一个项目由多个子项目组成时,可使用maven的module组织形式。 <!--总项目的pom文件打包形式必须为pom形式--> <packaging>pom</packaging> <!-- 在<modules>标签中配置<module>标签--> <modules> <module>../GraduationProjectCollect</module> <module>../GraduationProjectTrain</module> <module>../GraduationProjectUse</module> </modules>

    4.<exclusion>

    可用于解决多个依赖中的冲突。比如自己的项目依赖了A与B,A依赖了

    eclipse中图形化查看依赖传递,见图1.

    图1  可视化的maven依赖关系传递

    从图中可以看出,简单的版本冲突构建时是没有多大问题的,会忽略高版本的jar。

    <exclusion>标签通常用于<dependency>标签内部,一个例子见下:

    <dependency> <groupId>com.ctrip.framework.realtime</groupId> <artifactId>muise-storm-core</artifactId> <version>0.2</version> <exclusions> <exclusion> <groupId>jdk.tools</groupId> <artifactId>jdk.tools</artifactId> </exclusion> <exclusion> <artifactId>log4j-over-slf4j</artifactId> <groupId>org.slf4j</groupId> </exclusion> </exclusions> </dependency>

    5.<build>

    5.1 实现配置文件的变量替换

    场景:不同环境的数据库连接串、用户名不一样,构建项目时希望能做到自动替换。

    pom文件所在目录下有conf.properties文件,内容为: userName=XiaoMing 在src/main/sources/目录下有db.properties文件,内容为: user=${userName} 执行后,效果为 db.properties文件,内容为user=XiaoMing

    相应的pom内容片断见下:

    <build> <filters> <!-- 是以该pom文件路径作为工作目录 --> <filter>conf.properties</filter> </filters> <!--指定资源文件位置--> <resources> <resource> <directory>src/main/resources</directory> <!--可以在此配置过滤文件 --> <includes> <include>*.xml</include> <include>*.properties</include> </includes> <!--开启filtering功能 --> <filtering>true</filtering> </resource> </resources> <plugins> <plugin> <artifactId>maven-war-plugin</artifactId> <configuration> <version>2.5</version> </configuration> </plugin> </plugins> </build>

    最新回复(0)