mvn -Pxxx 表示激活 id 为 xxx的profile (如有多个,用逗号隔开);
<profile>
<id>release-sdk</id>
<properties>
<mvn.profile.active>release-sdk</mvn.profile.active>
</properties>
<modules>
<module>kuaishou-cny2022-tiger-sdk</module>
</modules>
</profile>
sdk 发包需要指定参数 mvn -Prelease-sdk 表示把sdk激活,只发sdk的
maven pluginManageMent会统一管理插件
maven properties 会统一管理版本号,底下dependency可以引用
<properties>
<!-- 当前工程版本号 -->
<revision>1.0.4-SNAPSHOT</revision>
<springfox.version>2.9.2</springfox.version>
</properties>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
<version>${springfox.version}</version>
</dependency>
mvn dependency:tree -Dverbose 表示查看冲突情况
groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
和依赖构建、分析和解决相关,这部分goal可以直接用maven的命令操作,例如:mvn dependency:tree
pom.xml插件:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<configuration>
<outputDirectory>${basedir}/../target/${artifactId}</outputDirectory>
</configuration>
</plugin>
maven工程打成jar包,并设置目录
<plugin>
<groupId>org.xolstice.maven.plugins</groupId>
<artifactId>protobuf-maven-plugin</artifactId>
<executions>
<execution>
<goals>
<goal>compile</goal>
<goal>compile-custom</goal>
</goals>
<configuration>
<pluginParameter>enable_deprecated=true</pluginParameter>
</configuration>
</execution>
</executions>
</plugin>
这个插件可以通过proto生成class文件
aven中scope作用:指定当前包的依赖范围和依赖的传递性,常见的可选值有:compile, provided, runtime, test, system
compile:为默认的依赖有效范围。如果在定义依赖关系的时候,没有明确指定依赖有效范围的话,则默认采用该依赖有效范围。此种依赖,在编译、运行、测试时均有效
provided:在编译、测试时有效,但是在运行时无效。例如:servlet-api,运行项目时,容器已经提供,就不需要Maven重复地引入一遍了
runtime:在运行、测试时有效,但是在编译代码时无效。例如:JDBC驱动实现,项目代码编译只需要JDK提供的JDBC接口,只有在测试或运行项目时才需要实现上述接口的具体JDBC驱动
test:只在测试时有效,例如:JUnit
system:在编译、测试时有效,但是在运行时无效。和provided的区别是,使用system范围的依赖时必须通过systemPath元素显式地指定依赖文件的路径。由于此类依赖不是通过Maven仓库解析的,而且往往与本机系统绑定,可能造成构建的不可移植,因此应该谨慎使用。systemPath元素可以引用环境变量
mvn生命周期:
清理clean:将以前编译得到的旧文件class字节码文件删除
编译compile:将java源程序编译成class字节码文件
测试test:自动测试,自动调用junit程序
打包package:动态Web工程打War包,java工程打jar包
安装install:Maven特定的概念-----将打包得到的文件复制到“仓库”中的指定位置
部署deploy:将最终的包复制到远程的仓库,以让其它开发人员与项目共享
如果子模块A引入了某依赖snapshot包 父模块没引这个依赖,只有子模块A是snapshot版本 其他模块都是release版本
如果common模块引入了某依赖snapshot包 父模块引了这个依赖,则所有模块都是snapshot版本
mvn compile后会生成target目录,存放的就是编译后的字节码文件
mvn clean会删除整个target文件夹
mvn命令参数:
-U 强制更新snapshot类型的插件或依赖库
-am 构建指定模块,同时构建指定模块依赖的其他模块
-pl --module_name 在指定模块上执行命令;
mvn clean -U install -pl kuaishou-sms-admin-web -am
Snapshot版本代表不稳定、尚处于开发中的版本,快照版本。
Release版本则代表稳定的版本,发行版本。
maven pom groupId是公司或组织域名+项目名,artifactId是模块名
maven坐标和仓库对应的映射关系:[groupId][artifactId][version][artifactId]-[version].jar
例如引入的依赖是:
<dependency>
<groupId>kuaishou</groupId>
<artifactId>zt-captcha-sdk</artifactId>
</dependency>
仓库中包路径是:m2/repository/kuaishou/zt-captcha-sdk/1.0.53/zt-captcha-sdk-1.0.53.jar
maven本地仓库和远程仓库
本地仓库:当前电脑上的仓库,路径是m2底下的
远程仓库:搭建在局域网中,一般公司都会有私服,私服一般使用nexus来搭建
maven依赖解析:
maven解析依赖信息时会到本地仓库中取查找被依赖的jar包,对于本地仓库中没有的会去中央仓库去查找maven坐标来获取jar包,获取到jar之后会下载。对于中央仓库也找不到依赖的jar包的时候,就会编译失败了
如果依赖的是自己或者团队开发的maven工程,需要先使用install命令把被依赖的maven工程的jar包导入到本地仓库中
举例:如果自己创建第二个maven工程HelloFriend,其中用到了第一个Hello工程里类的sayHello(String name)方法。我们在给HelloFriend项目使用 mvn compile命令进行编译的时候,会提示缺少依赖Hello的jar包。怎么办呢?
到第一个maven工程中执行 mvn install后,你再去看一下本地仓库,你会发现有了Hello项目的jar包。一旦本地仓库有了依赖的maven工程的jar包后,你再到HelloFriend项目中使用 mvn compile命令的时候,可以成功编译
pom <build>插件
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.1</version>
<configuration>
<!-- 源代码编译版本 -->
<source>1.8</source>
<!-- 目标平台编译版本 -->
<target>1.8</target>
</configuration>
</plugin>
该插件和编辑有关
mvn创建工程
mvn archetype:generate \
-DarchetypeGroupId=kuaishou \
-DarchetypeArtifactId=ks-boot-archetype-modules \
-DarchetypeVersion=1.0.0-SNAPSHOT \
-DinteractiveMode=false \
-DarchetypeCatalog=local \
-DgroupId=kuaishou \
-DartifactId=activity-checkpoint-passthrough \
-DprojectName=activity-checkpoint-passthrough \
-Dpackage=com.kuaishou.activity.checkpoint.passthrough
刚下载工程时,idea module的maven xml如果没有蓝色m,需要右键点击,选择add as maven project
idea jvm内存配置:
菜单 Help | Edit Custom VM Options
-Xms1g
-Xmx4g
-XX:ReservedCodeCacheSize=1g
maven:
Preferences | Build, Execution, Deployment | Build Tools | Maven (快捷搜索词:maven)
1、勾选 Always update snapshots,避免因为snapshot更新不及时导致编译不过
2、Importing把VM options for importer设置成 -Xmx5000M,遇到导入飘红则需要设置的更大
编译堆内存:
Preferences | Build, Execution, Deployment | Compiler(快捷搜索词:compiler)
Build process heap size (Mbytes): 2000
mvn checkstyle::check
可以报出编译问题
如果maven重新导入之后也找不到类,需要把对应module重新导入下
maven多环境yml配置文件切换和隔离:
maven增加多个yml文件,application.yml,application-dev.yml,application-test.yml
idea的maven可以选择激活哪个yml
maven命令行可以加入-Ptest指定运行哪个yml
标签:依赖,仓库,jar,maven,编译,mvn From: https://www.cnblogs.com/MarkLeeBYR/p/17488457.html