zoukankan      html  css  js  c++  java
  • 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目标,该目标会列出项目中所有的直接依赖和传递性依赖。

  • 相关阅读:
    奇数阶魔方问题
    《DSP using MATLAB》示例9.3
    《DSP using MATLAB》示例9.2
    《DSP using MATLAB》示例9.1
    找个目标很重要
    《DSP using MATLAB》示例Example 8.30
    《DSP using MATLAB》示例Example 8.29
    《DSP using MATLAB》示例Example 8.28
    《DSP using MATLAB》示例Example 8.27
    《DSP using MATLAB》示例Example 8.26
  • 原文地址:https://www.cnblogs.com/wxgblogs/p/6663563.html
Copyright © 2011-2022 走看看