Java-Maven


Maven

一、系统配置

idea中配置meaven,需要在起始页中进行配置。如果在项目中进行配置则只对当前项目有效。

配置加速源

<mirror>
  <id>aliyunmaven</id>
  <mirrorOf>*</mirrorOf>
  <name>阿里云公共仓库</name>
  <url>https://maven.aliyun.com/repository/public</url>
</mirror>
<mirror>
    <id>tencent</id>
    <name>tencent maven mirror</name>
    <url>https://mirrors.tencent.com/nexus/repository/maven-public/</url>
    <mirrorOf>*</mirrorOf>
</mirror>

配置JDK版本

默认使用jdk1.8

<profile>  
    <id>jdk-1.8</id>  
    <activation>  
        <activeByDefault>true</activeByDefault>  
        <jdk>1.8</jdk>  
    </activation>  
    <properties>  
        <maven.compiler.source>1.8</maven.compiler.source>  
        <maven.compiler.target>1.8</maven.compiler.target>  
        <maven.compiler.compilerVersion>1.8</maven.compiler.compilerVersion>  
    </properties>  
</profile>

配置Tomcat7插件(在pom文件中)

<build>
    <!--设置插件-->
    <plugins>
        <!--具体的插件配置-->
        <plugin>
            <groupId>org.apache.tomcat.maven</groupId>
            <artifactId>tomcat7-maven-plugin</artifactId>
            <version>2.1</version>
            <configuration>
                <port>80</port>
                <path>/</path>
            </configuration>
        </plugin>
    </plugins>
</build>

二、依赖管理

依赖传递

依赖具有传递性。

  • 直接依赖:在当前项目中通过依赖配置建立的依赖关系
  • 间接依赖:被依赖的资源如果依赖其他资源,当前项目间接依赖其他资源

依赖传递冲突问题

  • 路径优先:当依赖中出现相同的资源时,层级越深,优先级越低,层级越浅,优先级越高
  • 声明优先:当资源在相同层级被依赖时,配置顺序靠前的覆盖配置顺序靠后的
  • 特殊优先:当同级配置了相同资源的不同版本,后配置的覆盖先配置的

可选依赖

可选依赖指对外隐藏当前所依赖的资源——即不透明

<dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <version>4.12</version>
    <optional>true</optional>
</dependency>

排除依赖

排除依赖指主动断开依赖的资源,被排除的资源无需指定版本

<dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <version>4.12</version>
    <exclusions>
        <exclusion>
            <groupId>org.hamcrest</groupId>
            <artifactId>hamcrest-core</artifactId>
        </exclusion>
    </exclusions>
</dependency>

依赖范围

依赖的jar默认情况可以在任何地方使用,可以通过scpoe标签设定其作用范围

作用范围:

  • 主程序范围有效(main文件夹范围内)
  • 测试程序范围有效(test文件夹范围内)
  • 是否参与打包(package指令范围内)
scope 主代码 测试代码 打包 范例
compile(默认) Y Y Y log4j
test Y junit
provided Y Y servlet-api
runtime Y jdbc

三、生命周期和插件

生命周期

为了让构建过程自动化完成,Maven 设定了三个生命周期,生命周期中的每一个环节对应构建过程中的一个操作。

clean生命周期

  • pre-clean:执行一些需要在clean之前完成的工作
  • clean:移除所有上一次构建生成的文件
  • post-clean:执行一些需要在clean之后立刻完成的工作

site生命周期

  • pre-site:执行一些需要在生成站点文档之前完成的工作
  • site:生成项目的站点文档
  • post-site:执行一些需要在生成站点文档之后完成的工作,并且为部署做准备
  • site-deploy:将生成的站点文档部署到特定的服务器上

default生命周期

image-20220722151708377

插件

插件与生命周期内的阶段绑定,在执行到对应生命周期时执行对应的插件功能。一个插件可对应多个阶段。

可以通过插件自定义其他功能。

<!--在执行到generate-test-resources生命周期时,将源代码和测试代码打成源码包-->
<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-source-plugin</artifactId>
            <version>2.2.1</version>
            <executions>
                <execution>
                    <goals>
                        <goal>jar</goal>
                        <goal>test-jar</goal>
                    </goals>
                    <phase>generate-test-resources</phase>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

四、继承与聚合

聚合

聚合用于快速构建maven工程,一次性即可构建多个模块。

方法:创建一个空模块,打包类型定义为pom;然后定义当前模块进行构建操作时关联的其他模块名称。

<packaging>pom</packaging>

<modules>
    <module>../ssm_controller</module>
    <module>../ssm_service</module>
    <module>../ssm_dao</module>
    <module>../ssm_pojo</module>
</modules>

参与聚合操作的模块最终执行顺序与模块间的依赖关系有关,与配置顺序无关。

继承

通过继承可以实现在子工程中沿用父工程中的配置。

<!--在子工程中,定义当前工程的父工程-->
<parent>
    <groupId>fun.it</groupId>
    <artifactId>ssm</artifactId>
    <version>1.0-SNAPSHOT</version>
    <!--填写父工程的pom文件-->
    <relativePath>../ssm/pom.xml</relativePath>
</parent>

继承依赖定义

在父工程中定义依赖管理

<!--声明此处进行依赖管理-->
<dependencyManagement>
    <!--具体的依赖-->
    <dependencies>
        <!--spring环境-->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>5.1.9.RELEASE</version>
        </dependency>
    <dependencies>
<dependencyManagement>

继承依赖使用

在子工程中定义依赖关系,无需声明依赖版本,版本参照父工程中依赖的版本

<dependencies>
    <!--spring环境-->
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-context</artifactId>
    </dependency>
</dependencies>

继承与聚合

继承:用于快速配置

聚合:用于快速构建项目

相同点:

  • 聚合与继承的pom.xml文件打包方式均为pom,可以将两种关系制作到同一个pom文件中
  • 聚合与继承均属于设计型模块,并无实际的模块内容

不同点:

  • 聚合是在当前模块中配置关系,聚合可以感知到参与聚合的模块有哪些
  • 继承是在子模块中配置关系,父模块无法感知哪些子模块继承了自己

五、其他配置

属性

自定义属性

自定义属性等同于定义变量,方便统一维护

<!--定义-->
<properties>
    <spring.version>5.1.9.RELEASE</spring.version>
    <junit.version>4.12</junit.version>
</properties>

<!--调用-->
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-context</artifactId>
    <version>${spring.version}</version>
</dependency>

内置属性

<!--${basedir}获取项目的根路径-->
<systemPath>${basedir}/src/main/resources/lib/kingbasejdbc4.jar</systemPath>
<!--当前项目的version-->
${version}

Setting属性

使用Maven配置文件setting.xml中的标签属性,用于动态配置

${settings.localRepository}

Java系统属性

用于读取Java系统属性

$(user.home)

环境变量属性

使用Maven配置文件setting.xml中的标签属性,用于动态配置

${env.JAVA_HOME}

版本管理

工程版本

  • SNAPSHOT(快照版本):临时性的版本
  • RELEASE(发布版本):向外发布的比较稳定的版本

image-20220722225553683

资源配置

使其可以在任意配置文件中加载pom文件中定义的属性

调用格式:${jdbc.url}

配置资源文件对应的信息:

<resources>
    <resource>
        <!— 设定配置文件对应的位置目录,支持使用属性动态设定路径 -->
        <directory>${project.basedir}/src/main/resources</directory>
        <!-- 开启对配置文件的资源加载过滤 -->
        <filtering>true</filtering>
    </resource>
</resources>

多环境配置

<!--创建多环境-->
<profiles>
    <!--定义具体的环境:生产环境-->
    <profile>
        <!--定义环境对应的唯一名称-->
        <id>pro_env</id>
        <!--定义环境中专用的属性值-->
        <properties>
            <jdbc.url>jdbc:mysql://127.1.1.1:3306/ssm_db</jdbc.url>
        </properties>
        <!--设置默认启动-->
        <activation>
            <activeByDefault>true</activeByDefault>
        </activation>
    </profile>
    
    <!--定义具体的环境:开发环境-->
    <profile>
        <id>dev_env</id>
        ……
    </profile>
</profiles>

加载指定环境:

mvn install -P pro_env

跳过测试

  1. 使用命令跳过测试
mvn 指令 -D skipTests

执行的指令声明周期必须包含测试环节

  1. 使用界面操作跳过测试

image-20220722230709152

  1. 使用配置跳过测试
<plugin>
    <artifactId>maven-surefire-plugin</artifactId>
    <version>2.22.1</version>
    <configuration>
        <skipTests>true</skipTests><!--设置跳过测试-->
        <includes> <!--包含指定的测试用例-->
            <include>**/User*Test.java</include>
        </includes>
        <excludes><!--排除指定的测试用例-->
            <exclude>**/User*TestCase.java</exclude>
        </excludes>
    </configuration>
</plugin>

私服

配置本地仓库访问私服的权限(setting.xml):

<servers>
    <server>
        <id>heima-release</id>
        <username>admin</username>
        <password>admin</password>
    </server>
    <server>
        <id>heima-snapshots</id>
        <username>admin</username>
        <password>admin</password>
    </server>
</servers>

配置本地仓库资源来源(setting.xml):

<mirrors>
    <mirror>
        <id>nexus-heima</id>
        <mirrorOf>*</mirrorOf>
        <url>http://localhost:8081/repository/maven-public/</url>
    </mirror>
</mirrors>

配置当前项目访问私服上传资源的保存位置(pom.xml):

<distributionManagement>
    <repository>
        <id>heima-release</id>
        <url>http://localhost:8081/repository/heima-release/</url>
    </repository>
    <snapshotRepository>
        <id>heima-snapshots</id>
        <url>http://localhost:8081/repository/heima-snapshots/</url>
    </snapshotRepository>
</distributionManagement>

发布资源到私服命令:mvn deploy

原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/276279.html

(0)
上一篇 2022年7月22日
下一篇 2022年7月23日

相关推荐

发表回复

登录后才能评论