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>