Maven学习-优化和重构POM

  在一个复杂的项目中,项目的各个模块存在各种相互依赖关系。优化一个多模块项目的POM最好通过几步来做。总的来说,我们总是寻找一个POM中的重复或者多个兄弟POM中的重复。在多模块项目中依赖重复的模式主要包括①:一些依赖在多个模块中被生命;②有一些依赖关系是关联的,共享同样的版本③:兄弟模块依赖和兄弟模块版本的重复。Maven提供简单的机制能让你将所有的依赖重构到一个父POM。重复的依赖声明很难保证一个大项目中版本的一致性。我们可以找出所有被应用一次以上的依赖,然后将其向上移动到父POM的dependencyMangement片段。如下所示:

<?xml version="1.0" encoding="UTF-8"?>
<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>com.netease.parent</groupId>
    <artifactId>demo</artifactId>
    <packaging>pom</packaging>
    <version>1.0.3-RELEASE</version>
    <modules>
        <module>demo-child</module>
    </modules>

    <properties>    
        <commons-logging.version>1.2</commons-logging.version>
        <commons-io.version>2.4</commons-io.version>    
        ...
    </properties>

    <dependencyManagement>
        <dependencies>        
            <dependency>
                <groupId>commons-logging</groupId>
                <artifactId>commons-logging</artifactId>
                <version>${commons-logging.version}</version>
            </dependency>

            <dependency>
                <groupId>commons-io</groupId>
                <artifactId>commons-io</artifactId>
                <version>${commons-io.version}</version>
            </dependency>
            ...
        </dependencies>
    </dependencyManagement>
</project>
View Code

在这些依赖配置被上移后,我们需要移除子模块的依赖版本,否则会覆盖定义在父项目的依赖。如下:

<dependencies>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-context</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-core</artifactId>
    </dependency>
    ...    
</dependencies>
View Code

为降低依赖重复主要使用了两种优化①:上移共同的依赖至dependencyMangement②为兄弟项目使用内置的项目version和groupId。

优化插件

  dependencyMangement不适用于插件依赖管理,我们可以使用build元素下的pluginManagement来管理。

<project>
    ...
    <build>
    <pluginManagement>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <configuration>
                    <source>1.5</source>
                    <target>1.5</target>
                </configuration>
            </plugin>
            ...
        </plugins>
    </pluginManagement>
    </build>
    ...
</project>
View Code

使用MVN Dependency进行优化

  通过字节码分析Maven Dependency插件能够帮助发现对依赖的直接应用。mvn dependency:analyze  通过该目标分析项目,查看是否有直接依赖或者一些引用了但不是直接声明的依赖。为了进一步排查运行 mvn  dependency:tree目标,该目标会列出项目中所有的直接依赖和传递性依赖。

posted @ 2017-04-03 20:31  简单爱_wxg  阅读(1651)  评论(0编辑  收藏  举报