maven高级特性

一、资源配置 、资源加载属性值

 

 之后打包,在打包的jar包中看属性:

二、多环境配置,有些配置在测试环境

 上面的例子,根据不同环境生效不同的配置:

 当我们install 时,生效的是dev,如果我们要让其他环境生效,那么命令是 install -P pro

 

 

 这样生产的配置就生效了

 

 三、生命周期与插件之间的关系

 1. 根据生命周期的执行规则,如果我们要跳过测试阶段,如何处理:

 

 四、自定义插件:

   1.新建项目引入依赖:

  

<?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.shop</groupId>
    <artifactId>hello-maven-plugin</artifactId>
    <version>1.0-SNAPSHOT</version>
    <packaging>maven-plugin</packaging>

    <properties>
        <maven.compiler.source>8</maven.compiler.source>
        <maven.compiler.target>8</maven.compiler.target>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.apache.maven.plugin-tools</groupId>
            <artifactId>maven-plugin-annotations</artifactId>
            <version>3.5.2</version>
        </dependency>
        <dependency>
            <groupId>org.apache.maven</groupId>
            <artifactId>maven-plugin-api</artifactId>
            <version>3.5.2</version>
        </dependency>
    </dependencies>

</project>
artifactId:要么写成xxx-maven-plugin 要么写成 maven-xxx-plugin

2.在setting.xml中配置:

 3.写插件相关的类

import org.apache.maven.plugin.AbstractMojo;
import org.apache.maven.plugin.MojoExecutionException;
import org.apache.maven.plugin.MojoFailureException;
import org.apache.maven.plugins.annotations.Mojo;

/**
 * author: yangxiaohui
 * date:   2023/6/2
 */
@Mojo(name = "sayHi")
public class MyShopPlugin extends AbstractMojo

{
    @Override
    public void execute() throws MojoExecutionException, MojoFailureException {
        System.out.println("执行自定义插件。。。。。。。。");

        getLog().info("这是自定义插件。。。。。。。");
    }
}

4.将项目install 安装到本地仓库

 

 5. 找个项目,在它的控制台执行

 

 

 

6. 在项目中配置插件,找个项目假如如下插件配置,插件需要绑定到指定的生命周期阶段,这里挂靠clean阶段,代表clean生命周期时,会执行插件的sayHi方法

    <build>
        <plugins>
            <plugin>
                <groupId>com.shop</groupId>
                <artifactId>hello-maven-plugin</artifactId>
                <version>1.0-SNAPSHOT</version>
                <executions>
                    <execution>
                        <id>hello</id>
                        <!-- 指定和目标关联的生命周期阶段 -->
                        <phase>clean</phase>
                        <goals>
                            <goal>sayHi</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>

 

 五、依赖的类型

1.pom文件是单继承的,也就是只能写一个parent标签,当我们要实现多继承时,需要使用如下方式:

 <dependencyManagement>

        <dependencies>
            <dependency>
                <groupId>com.alibaba.cloud</groupId>
                <artifactId>spring-cloud-alibaba-dependencies</artifactId>
                <version>${spring-cloud-alibaba.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>${spring-cloud.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

其中<scope>import</scope> 必须放在 </dependencyManagement> 标签中,由于parent都是打成pom包的,所以类型也是pom,这样子类就可以依赖该父类里面的所有依赖了

2. scope为system时,用来引入磁盘中的一些jar包:

<dependency>
<groupId>com.shop</groupId>
<artifactId>shop_dto</artifactId>
<version>1.0-SNAPSHOT</version>
<systemPath>D:\tempare\shop_dto-1.0-
SNAPSHOT.jar</systemPath>
<scope>system</scope>
</dependency

3.scope为test时,在src/main/java下引用不到这些类

<dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.13.2</version>
            <scope>test</scope>
 </dependency>

4.scope为provide,在打成jar包后,jar包不会包含这些依赖,比较有名的sevlet-api因为tomcat已经提供了

 <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>servlet-api</artifactId>
            <version>2.5</version>
            <scope>provided</scope>
</dependency>

 

posted @ 2023-06-02 10:38  yangxiaohui227  阅读(22)  评论(0编辑  收藏  举报